Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Name meiner Funktion ermitteln (https://www.delphipraxis.net/195358-name-meiner-funktion-ermitteln.html)

bernhard_LA 21. Feb 2018 15:01

Name meiner Funktion ermitteln
 
kann man über RTTI den Namen einer Funktion ermitteln ?


Delphi-Quellcode:
function TEST_1 : boolean
var MyFuncname : String ;
begin
    MyFuncname := getFunctionname_here;   //  sollte jetzt TEST_1  zurückgeben
end;



function TEST_2 : boolean;
var MyFuncname : String ;
begin
     MyFuncname := getFunctionname_here;   //  sollte jetzt TEST_2  zurückgeben
end;
end;

himitsu 21. Feb 2018 15:10

AW: Name meiner Funktion ermitteln
 
Nein.

einfache Prozeduren/Funktionen haben keinen Namen, in der RTTI.
Das ist nur bei "einigen" Methoden von Klassen, Records und Interfaces.

Falls mit Debuginfos kompilert, könntest du dort suchen.

bernhard_LA 21. Feb 2018 15:29

AW: Name meiner Funktion ermitteln
 
müsste ich dann überall Attribute vergeben, kann ich damit den Namen der Funktion herausfinden welche gerade ausgeführt wird ?

himitsu 21. Feb 2018 15:40

AW: Name meiner Funktion ermitteln
 
Ich bin mir jetzt nicht sicher, ob für normale Funktionen die Attribute möglich sind.
Aber ich denke mal nicht, weil Funktionen nicht in der RTTI landen. (bin mir fast sicher, dass TRttiContext nirgendwo Funktionen auflistet und somit kannst du auch dafür nichts auslesen, wie z.B. Attribute)

Der Compiler gibt ja "leider" keine Fehlermeldung Warnung aus, wenn er auf unbekannte Attribute trifft, oder wenn er ein Attribut ignoriert, weil es dort nicht unterstützt wird.

> Als Class-Function in einer abstrakten Klasse verpacken

Der schöne Günther 21. Feb 2018 16:09

AW: Name meiner Funktion ermitteln
 
Das ist doch eine Fortführung von deinem
http://www.delphipraxis.net/195342-g...ml#post1394315
oder?

Du willst das Richtige :thumb:, aber der Weg ist der falsche :warn:

Du willst dir nicht antun bei jeder Methode irgendwo völlig redundant nochmal einen String zu parken. Spätestens nach dem ersten Umbenennen einer Methode passt da nichts mehr, da hilft dir in Delphi auch kein Tool.

Weiterhin in jede Methode ein try..except mit ständig dem gleichen Boilerplate-Code ist sicher auch nicht das richtige.

Du willst protokollieren wenn etwas fehlschlägt, für gewöhnlich via Exceptions, richtig? Wäre es statt dem blanken Methodennamen nicht viel besser wenn du gleich den gesamten Callstack protokollieren könntest, wie du es auch im Debugger siehst wenn die IDE wegen einer Exception anhält?

Eine kostenlose Lösung über die Jedi JCL hierfür zeigt der nette Mann hier aus dem Forum:
https://blog.dummzeuch.de/2014/03/08/using-jcldebug/

Das verwenden wir auch in all unserer Software, es funktioniert prächtig. Kein Herumprobieren, man sieht direkt in welcher Zeile(!) es beim Kunden vor Ort knallt.

Du brauchst vielleicht das erste mal ein paar Minuten um es zu verstehen, aber das lohnt sich!

Falls du den Namen der aktuellen Methode für etwas völlig anderes brauchst ignorier mich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz