Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#6

AW: ....Wo im Code befinde ich mich gerade?.....

  Alt 7. Mai 2018, 10:43
Jupp, ExceptAddr ist nur während der Exception-Behandlung gesetzt.
ReturnAddress oder war's ReturnAddr gibt es auch seit paar Jahren im Delphi.

Also die Zeile nach dem Aufruf der aktuellen Funktion/Methode. Notfalls einfach in einer Sub-Function abfragen. (diese sollte aber eventuell mit Stackframe compiliert worden sein)




Die nötigen Debuginfos (inkl. Zeilennummern) müssen in der Anwendung enthalten sein oder daneben liegen.

Eurekalog macht das über seinen ecc32.exe und auch beim Jedi mußt du das mit deren Compiler/PostCompiler erledigen.
Oftmals wird dazu z.B. die *.MAP-Datei des Compilers/Linkers verwendet, geparst und diese Infos als Ressource in die EXE eingefügt.



Leider kennt Delphi sowas wie __LINE__ und __FILE__ nicht, was man so ähnlich aus anderen Sprachen kennt. (z.B. PHP)

Das Einzige, wo der Delphi-Compiler diese Informationen in den Code einbaut, ist beim Delphi-Referenz durchsuchenAssert.
{$ASSERTIONS ON} try Assert(False) except on E: Exception do ShowMessage(E.Message) end;
Blöder weise hat Delphi-Referenz durchsuchenEAssertionFailed dieses ausschließlich im Text und nicht als eigenständige Property.
Alternativ in System.AssertErrorProc reinhängen und eine eigene Exception werfen. (siehe SysUtils.AssertErrorHandler)
Bzw. aus SysConst.SAssertError kann man sich einen RegEx basteln und auf E.Message anwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Mai 2018 um 10:50 Uhr)
  Mit Zitat antworten Zitat