AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Prozedur / Funktionsname auslesen?

Ein Thema von Joerginger · begonnen am 29. Mai 2013 · letzter Beitrag vom 30. Mai 2013
Antwort Antwort
Joerginger

Registriert seit: 22. Jan 2009
Ort: Wien
38 Beiträge
 
Delphi 7 Enterprise
 
#1

Prozedur / Funktionsname auslesen?

  Alt 29. Mai 2013, 13:19
Hallo liebe Mit-Delphianer,

ich schwör's, ich hab herumgesucht, allein, mir ist nicht so ganz klar wonach ich da suchen hätte sollen... Jedenfalls: Nix gefunden bislang. Vielleicht isses ja eh eine bekannte G'schicht, also ich lass es mal rüber:

Ich möchte (würd gerne) ganz einfach innerhalb einer Funktion auf deren Namen zugreifen können...

Beispiel:
Code:
function tuWas(sS:string):boolean;

var
    einString: string;

begin
    einString:=?????.Text //GENAU DA MEINE ICH... IN einString sollte jetzt 'tuWas' stehen...
    showMessage(einString); //GIBT IN DIESEM FALL tuWas aus
end;
Wegen einer vernünftigen Fehlerbehandlungsroutine warads...

GLG aus Wien,

E. Joerginger (D7, immer noch)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.747 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Prozedur / Funktionsname auslesen?

  Alt 29. Mai 2013, 13:25
Extended RTTI gibt es in Delphi 7 nicht.

Anscheinend kann man mittels Debug-Informationen sich anscheinend meistens etwas halbwegs funktionierendes zusammenzimmern:
http://stackoverflow.com/questions/1301254/

Aber sonst habe ich leider auch noch nie etwas in der Art gesehen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.820 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Prozedur / Funktionsname auslesen?

  Alt 29. Mai 2013, 13:34
Dein Beispiel ist wohl nicht das, was du eigentlich beabsichtigst - dazu ist es zu trivial. Da es aber keine offizielle Möglichkeit gibt, an den Namen der aktuellen Methode zu kommen (ohne sich dabei die Ohren zu brechen), solltest du besser deinen Anwendungsfall breiter umschreiben. Vielleicht gibt es ja einen ganz anderen Weg, das eigentliche Problem zu lösen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Joerginger

Registriert seit: 22. Jan 2009
Ort: Wien
38 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Prozedur / Funktionsname auslesen?

  Alt 29. Mai 2013, 16:27
Mal Danke für die Antworten, und ja, ich hab nicht vor in meinen Applikationen per MsgBox den aktuellen Prozedurnamen auszugeben

Ich möchte gern zweierlei erreichen:

1.) eh geschrieben: eine vernünftige Fehlerbehandlungsroutine, die ich in jeder App verwenden kann. Wo ich ganz einfach wenn's Peng macht eine MsgBox bekomme mit aufrufender Prozedur/Funktion, und - wenn ichs übergeben habe eine kurzes Statement. Das kann aber in mehreren Routinen gleich sein => dann ists wieder nicht ganz aussagekräftig.

2.) für ein Logging mit dem ich sehen kann welche Prozedur wann was aufgerufen hat... Das mache ich üblicherweise dann in der Registry mittels "hiddenFeature" ein/ausschaltbar, sprich, es passiert nur dann, wenn der zu lesende Key existiert bzw. einen Wert hat.

Ich nehme an, man könnte beides auch mit Parametern lösen, ich fänd's halt eleganter wenn der Parameter "wer bin ich" automatisch mitrutscht und ich nicht bei jedem Aufruf meines Loggings das "zu Fuss" mitübergeben muss, unabhängig von der Fehleranfälligkeit (Kopieren und vergessen den Aufrufer zu changen etc.)

GLG,

EJ
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.820 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Prozedur / Funktionsname auslesen?

  Alt 29. Mai 2013, 16:35
Einen Königsweg kenne ich leider auch nicht. Man könnte eventuell über die Debug-Infos was machen, aber das ist schon ein ziemliches Gehacke.

Beim Logging setze ich auf CodeSite. Da gibt es einen Wizard, der einem diese Arbeit abnimmt.

Das Synchronisieren des Methodennamen innerhalb der Strings dieser Methode bei Umbenennen erledigt übrigens der ModelMaker Code Explorer relativ unkompliziert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Prozedur / Funktionsname auslesen?

  Alt 29. Mai 2013, 20:20
Schau mal bei den Jedis nach.

Dort gibt es u. a. die Units: JclDebug, JclHookExcept.

Das Programm muss mit ausführlicher MAP-Datei erstellt werden. In der Fehlerbehandlung kannst Du Dir dann die Unit ausgeben lassen, die den Quelltext enthält, die Funktion/Prozedure und mit ein bisserl Glück bekommst Du auch noch die Nr. der Quelltextzeile, in der der Fehler auftrat.

Eine mögliche Umsetzung findest Du eventuell unter http://stackoverflow.com/questions/1...ling-libraries

In einem meiner Programme sehen die per JCL erstellten Fehlermeldungen inhaltlich so aus:
Code:
No format specified., Fehlertyp: EMemTableError, Sender: tm [TSpecialTimer]
(0011E663){MeinDeineSeineEine.exe} [5828F663] kbmMemTable.TkbmCustomMemTable.SaveToFileViaFormat (Line 9655, "kbmMemTable.pas" + 5) + $0
Dateiname: MeinDeineSeineEine.exe
Fehleradresse: 0011E663
Unit: kbmMemTable
Fehleradresse: 5828F663
Modulname: kbmMemTable.pas
Prozedur: TkbmCustomMemTable.SaveToFileViaFormat
Prozeduroffset: 55
Zeilennummer: 9655
Zeilenoffset: 0
Modul: 1477902336 [58170000]
Finde die Aussagekraft von Fehlermeldungen dieser Art, erstellt mit der JCL, lassen kaum noch Wünsche offen.

Oder schau Dir aus der JVCL mal die Komponente TJvDebugHandler an, hier kannst Du per Attribute ein bisserl auswählen, was an Fehlern behandelt werden soll und ob diese Fehler in eine Logdatei geschrieben werden sollen. Die Meldungen, die dort ausgegeben werden, sollten auch für die Lokalisierung eines Fehlers ausreichen.
  Mit Zitat antworten Zitat
D-User

Registriert seit: 19. Dez 2006
Ort: NRW
56 Beiträge
 
#7

AW: Prozedur / Funktionsname auslesen?

  Alt 30. Mai 2013, 11:09
geht zwar wohl nicht in D7, sollte aber trotzdem hier an der Stelle erwähnt werden:

in Attributen kann man ja alle mögliche Info ablegen, speziell also auch Methodenamen;
(geht nicht nur bei Methoden, sondern auch KLassen, Feldern, Props);


Beispiel hierzu:
http://www.malcolmgroves.com/blog/?p=476
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf