Zugriff auf Aufrufstack

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Zugriff auf Aufrufstack

Beitrag von u-boot »

Hätte gern gewusst ob man zur Laufzeit den Aufrufstack auslesen lassen kann und falls ja wie das geht.
P.S. Ich meine nicht beim Debuggen.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Zugriff auf Aufrufstack

Beitrag von martin_frb »

Kopie aus gdbmidebugger.pp

Ohne debug info gibt es einfach die Addressen.

Code: Alles auswählen

on e: Exception do begin
      try
        debugln(['ERROR: Exception occured in ',ClassName+'.DoExecute ',
                  e.ClassName, ' Msg="', e.Message, '" Addr=', dbgs(ExceptAddr),
                  ' Dbg.State=', dbgs(FTheDebugger.State)]);
        Report :=  BackTraceStrFunc(ExceptAddr);
        Report2 := Report;
        Frames := ExceptFrames;
        for I := 0 to ExceptFrameCount - 1 do begin
          Report := Report + LineEnding + BackTraceStrFunc(Frames[I]);
          if i < 5
          then Report2 := Report;
        end;
      except
      end;
      debugln(Report);
there is also getframe() search it in the sources, to see how to get the current stack

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zugriff auf Aufrufstack

Beitrag von Socke »

martin_frb hat geschrieben:Kopie aus gdbmidebugger.pp

Ohne debug info gibt es einfach die Addressen.
Ich habe das Gefühl, dass eine ähnliche Funktion auch in den LCL-Methoden gibt (LCLProc/LCLIntf?). Ansonsten schau dir mal den Quelltext von T(Custom)Application.HandleException (oder so ähnlich) an, die macht das ja auch...

Edit:
Schreibt das ganze nur in eine Datei: http://lazarus-ccr.sourceforge.net/docs ... stack.html; mir scheint, als ob diese Aufgabe innerhalb von Free Pascal und Lazarus nicht nur einmal gelöst wurde...
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten