Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prozedur / Funktionsname auslesen? (https://www.delphipraxis.net/175079-prozedur-funktionsname-auslesen.html)

Joerginger 29. Mai 2013 13:19

Prozedur / Funktionsname auslesen?
 
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)

Der schöne Günther 29. Mai 2013 13:25

AW: Prozedur / Funktionsname auslesen?
 
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...

Uwe Raabe 29. Mai 2013 13:34

AW: Prozedur / Funktionsname auslesen?
 
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.

Joerginger 29. Mai 2013 16:27

AW: Prozedur / Funktionsname auslesen?
 
Mal Danke für die Antworten, und ja, ich hab nicht vor in meinen Applikationen per MsgBox den aktuellen Prozedurnamen auszugeben :-D

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

Uwe Raabe 29. Mai 2013 16:35

AW: Prozedur / Funktionsname auslesen?
 
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.

nahpets 29. Mai 2013 20:20

AW: Prozedur / Funktionsname auslesen?
 
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.

D-User 30. Mai 2013 11:09

AW: Prozedur / Funktionsname auslesen?
 
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:38 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