![]() |
Debuginformationen aufschlüsseln (StackBackTrace)
Windows liefert ja seit XP so schöne DebugInformationen .. z.B. Dieses:
Delphi-Quellcode:
Hier stehen natürlich nur die Rücksprungzeiger drinnen.
Function CaptureStackBackTrace(FramesToSkip, FramesToCapture: LongWord;
BackTrace: Pointer; Var BackTraceHash: LongWord): Byte; StdCall; External 'Kernel32.dll' Name 'RtlCaptureStackBackTrace'; Procedure TForm1.FormCreate(Sender: TObject); Var B: Byte; P: Array[0..62] of Pointer; H: LongWord; i: Integer; Begin FillChar(P, SizeOf(P), 255); B := CaptureStackBackTrace(0, 62, @P, H); Edit1.Text := Format('Hash:$%8.x ', [H]); For i := 0 to B - 1 do Edit1.Text := Edit1.Text + Format('$%p ', [P[i]]); End; StackFrames sollten besser an sein, sonst kann es sein, daß 'ne "kleine" Funktion einfach übersehn wird. (von vorn nach hinten: die erste Adresse ist also die Rücksprungadresse hinter den Aufruf von CaptureStackBackTrace) Nun meine Frage: Direkt mit Delphi ist es da doch nich möglich aus den Zeigern Funktionsnamen zu machen? Also selbst wenn man alle möglichen delphieigenen Debuginformationen in der EXE aktiviert hat. Der Debugger kennt sie ja, aber die wird er wohl nur aus der .DCU rausholen. :gruebel: |
Re: Debuginformationen aufschlüsseln (StackBackTrace)
Liste der Anhänge anzeigen (Anzahl: 1)
Doch, das geht. Leider ist das ein etwas längeres Thema und ich muss gleich zur Arbeit. Mehr dazu nachher.
Deshalb nur kurz die Frage: Wie wäre es mit ![]() |
Re: Debuginformationen aufschlüsseln (StackBackTrace)
madExcept ist mir da etwas zu "mächtig" (groß), vorallem um es dauerhaft in der Anwendung zu lassen.
Ich hab ja angefangen mir 'ne eigene Exception-Klasse (Erweiterung von Exception) zu schreiben, welche halt nur noch ein paar hilfreiche Zusatzinfos mit anbieten und die auch dauerhaft in Anwendungen drinnen bleibt. Das Problem ist ja, daß zwar in einer Funktion der Fehler auftritt, aber dieses an irgendwelchen "inkorrekt" übergebenen Parametern irgendwo weiter vorne liegt. Wenn diese Funktion jetzt an mehreren Stellen aufgerufen wird und man nur erfährt "hier ist ein Fehler passiert", dann ist es nicht immer so einfach auch auf die Aufrufstelle zurückzuschließen. Drum wäre ein StackTrace doch hilfreich. Mir würden auch schon Zeilennummer und Unitnamen weiterhelfen (alle Funktionsnamen werden wohl schwierig sein) Wenn passende Debuginformationen gefunden werden, dann nur würde ich gern noch die Namen wissen, da man mit den blosen Adressen nicht immer was anfangen kann. Aktuell hab ich diese Exception-Klasse in meinem himXML (worin sie auch entwickelt wurde) und Adressen fremder Anwendungen würden mir bei einer Fehleranalyse nicht viel helfen. Es wäre auch schwieriger in fremde Applications einfach madAxcept einzufügen. Drum erweitere ich NUR meine eigenen Exceptions und alle, welche davon abgeleitet sind und in der Restlichen Application wird nichts verändert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz