Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktionsname im COde nutzen (https://www.delphipraxis.net/203768-funktionsname-im-code-nutzen.html)

mensch72 22. Mär 2020 18:26

AW: Funktionsname im COde nutzen
 
Die "Idee" ist recht einfach umsetzbar... "C++Like" mit einem eigenem kleinen PreProzessor :)

Also man schreibe sich fix ein kleines Programm, welches man in der IDE unter "RunBeforeCompile" und "RunAfterCompile" konfiguriert.

Neben __FILE__, __LINE__, __FUNCTION__ sind auch __DATE__ und __TIME__ für als CompileTimeStamp sehr nützlich... also:
- schauen, ob zum PasFile KEINE BackupDatei (z.B. "?.pas.pre") da ist
- das PAS File zeilenweise im einfachsten Fall in eine "Stringlist" einlesen und diese "zeilenweise" durchlaufen
- zeilenweie bei "procedure" und "function" das was dahinter kommt, also bis zur KlammerAuf bzw dem Semikolon für "__FUNCTION__" merken
- zeilenweie 5x "StringReplace" für '__FILE__', '__LINE__', '__FUNCTION__', '__DATE__', '__TIME__"
- wenn durch, org. PasFile umbenennen(z.B. "?.pas.pre") sowie StringList als PasFile abspeichern und den "PreProzessor" beenden
- Delphi übersetzt nun den Code mit den "eingesetzten RealStrings"
- anschließend wird der "PreProzessor" ein zweites mal gestartet, und benennt das PasFile z.b: in "?.pas.txt" um, und anschließend das gesicherte "?.pas.pre" wieder in "?.pas" (man könnte das auch als zweites sepatates "Restore&CleanUp" Programm schreiben)

Zur Optimierung sollte man das Tool via geeignetem DirectoryFilter davon abhalten fremden Source also Komponenten,Libs,RTL,VCL,FMX,... zu bearbeiten:)

himitsu 22. Mär 2020 22:25

AW: Funktionsname im COde nutzen
 
Zitat:

__DATE__ und __TIME__
Dieses wird bereits im PE-Header einkompiliert und seit paar Jahren von Delphi sogar an der richtigen Stelle.

Einen echten Preprozessor wie für Makros nötig sind, gibt es leider nicht, k.A. warum sich der Hersteller so dermaßen seit Jahrzehnten so dermaßen dagegen wehrt, bzw. es so penetrant ignoriert.

Im Inlinecompilier kann man versuchen sich reinzuhängen, denn dort verwendet der Compiler auch geänderte Inhalte geladener Dateien, aber spätestens beim DCC war es dass, außer man manipuliert direkt die Quellcodedateien.
Siehe z.B. deine Idee, wobei man da extrem aufpassen muß nichts kaputt zu machen, wenn es mittendrin abkratzt, und die auch nicht __history bzw. ein VCS bis zur Unbenutzbarkeit durcheinander bringt.

Es gibt leider kein Event (mehr), wo man "sicher" Dateiinhalte, ohne zu speichern, zwischen Laden und Compilieren manipulieren kann.

jaenicke 23. Mär 2020 05:06

AW: Funktionsname im COde nutzen
 
Zitat:

Zitat von t2000 (Beitrag 1460309)
Ich werde für mich jetzt die Namen einfach reinschreiben. Sooo wichtig/dringend ist es für mich nicht. Habe einfach in meinem ErrorMessage-System eine "Location"-String Variable drin, die mir die Position mitteilt. Ist bei einem größeren System mit Error-Klassen sehr hilfreich.

Es gibt aber auch schon fertige Tools für den Zweck, die auch gleich den ganzen Stacktrace loggen und die Fehler auch verschicken können usw., so z.B. Eurekalog oder madExcept.

t2000 23. Mär 2020 08:18

AW: Funktionsname im COde nutzen
 
Zitat:

Zitat von jaenicke (Beitrag 1460340)
Zitat:

Zitat von t2000 (Beitrag 1460309)
Ich werde für mich jetzt die Namen einfach reinschreiben. Sooo wichtig/dringend ist es für mich nicht. Habe einfach in meinem ErrorMessage-System eine "Location"-String Variable drin, die mir die Position mitteilt. Ist bei einem größeren System mit Error-Klassen sehr hilfreich.

Es gibt aber auch schon fertige Tools für den Zweck, die auch gleich den ganzen Stacktrace loggen und die Fehler auch verschicken können usw., so z.B. Eurekalog oder madExcept.

Ich habe MadExcept seit über 15 Jahren im Einsatz (Delphi 7 Projekt, von dem ich lebe). Es ist/war ok, aber bei meinem neuen Projekt werde ich solche Tools nicht mehr nutzen. Und in diesem speziellem Fall geht es um eine Fehlermeldung, die von einer REST-API im JSON-Format zurückgegeben werden soll.
Trotzdem Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Seite 2 von 2     12   

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