Wie feststellen, wo eine Exception auftritt

Für Fragen rund um die Ide und zum Debugger
Antworten
carknue
Beiträge: 7
Registriert: Mi 7. Apr 2010, 20:06

Wie feststellen, wo eine Exception auftritt

Beitrag von carknue »

Hallo,

ich habe vor einigen Jahren mal Programme für Windows mit Delphi programmiert. Da ich im Februar auf Mac OS umgestiegen bin, möchte ich diese Programme jetzt auch auf dem Mac an Laufen bringen und bin dabei auf Free Pascal und Lazarus gestoßen.

Es war recht einfach, die .dfm und die Units im Lazarus lauffähig zu machen. Prinzipiell läuft das erste Programm, bis auf Internetzugriff (mit Indy) und ein paar anderen Kleinigkeiten. Aber um diesen Kleinigkeiten auf die Schliche zu kommen bräuchte ich etwas Starthilfe hier, denn die Doku zur IDE ist im Netz nicht wirklich ergiebig.

Ich mußte leider einen aktuellen Snapshot von Lazarus installieren und FP2.4, da die aktuelle Stable oder der Release auf dem Mac Probleme mit dem Debugger hat. Jetzt habe ich eine Procedure in meinem Programme die bei der Ausführung abstürzt. Bei Delphi war ich es gewohnt, das die Zeile an der es crasht im Editor markiert wird. Das ist scheinbar bei auf dem Mac nicht so oder liegt das an dem Snapshot? Im Debuggerfenster erscheint folgende Ausgabe, mit der ich aber auch nicht viel anfangen kann. Wäre schön, wenn da die Zeilennummer in der die Exception auftrat stehen würde oder was sagt mir diese Meldung?

Code: Alles auswählen

TCarb*stopped,time={wallclock="47.25934",user="0.02424",system="0.03221",start="1270593184.502622",end="1270593231.761959"},reason="breakpoint-hit",commands="no",times="1",bkptno="7",thread-id="1"
 
(gdb) 
 
<-data-evaluate-expression ^^shortstring(^pointer($rdi)^+24)^^>
^error,msg="Invalid cast."
 
(gdb) 
 
<x/s ^Exception($rdi)^.FMessage>
&"x/s ^Exception($rdi)^.FMessage\n"

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Wie feststellen, wo eine Exception auftritt

Beitrag von Euklid »

Hallo carknue,

hast Du in den Projekt --> Projekteinstellungen --> Compilereinstellungen --> Quelltext
alle Überprüfungen eingeschalten? Zusätzlich müssen in folgendem Menü Einstellungen getätigt werden: Projekteinstellungen --> Compilereinstellungen --> Linken
Dort sollte "Zeilennummern anzeigen" aktiviert und "Debuggersymbole entfernen" deaktiviert sein. Wenn Du viel mit Pointern arbeitest, kannst Du die Fehlerquelle am Besten finden, wenn Du die "heaptrc" ebenfalls einschaltest. Dann wird über die Konsole ein Backtrace angezeigt, wenn das Programm beendet wird.
Sowohl unter Quelltext als auch unter Linken sollte beim Debuggen die Smartlinking-Option deaktiviert sein - zumindest habe ich die Erfahrung gemacht, dass ansonsten der Debugger nicht mehr so gut zurecht kommt.

In der Regel springt der Debugger in der Tat in die gefragte Quelltextzeile - zumindest unter Linux.

Viele Grüße, Euklid

Antworten