Frage zu Debug Mode

Für Fragen rund um die Ide und zum Debugger
Antworten
wennerer
Beiträge: 253
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Frage zu Debug Mode

Beitrag von wennerer »

Hallo zusammen,
wenn ich ein Projekt im Debug Modus kompiliere nutze ich momentan nur das Konsolenfenster um Fehler zu erkennen.
Konsolenfenster.png
Konsolenfenster.png (37.33 KiB) 623 mal betrachtet

Im Verzeichnis wird mir ja aber auch eine Datei "irgendwas.dbg" angelegt. Was kann ich denn mit der anfangen bzw. für was wird die genutzt?
dbg.png
dbg.png (4.9 KiB) 623 mal betrachtet
Viele Grüße
Bernd

MmVisual
Beiträge: 1150
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Frage zu Debug Mode

Beitrag von MmVisual »

Aus der Ausführbaren Datei werden alle zum Debug benötigte Infos in eine extra Datei ausgelagert, damit ist die eigentliche EXE deutlich kleiner.
Die dbg Datei kann jederzeit gelöscht werden und die EXE funktioniert auch ohne diese Datei. Nur kann man dann nicht mehr Debuggen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 785
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Frage zu Debug Mode

Beitrag von fliegermichl »

Man kann einstellen, ob die Debuggerinformationen in der exe oder in der externen dbg Datei untergebracht werden sollen.
Projekt -> Projekteinstellungen -> Debuggen -> Debugger Info -> Use external debug symbols file

wennerer
Beiträge: 253
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Frage zu Debug Mode

Beitrag von wennerer »

Danke für die Antworten,

fliegermichl schrieb:
Man kann einstellen, ob die Debuggerinformationen in der exe oder in der externen dbg Datei untergebracht werden sollen.
Projekt -> Projekteinstellungen -> Debuggen -> Debugger Info -> Use external debug symbols file
Hab ich getestet. Ja dann macht er nur noch eine Datei, die dbg ist weg. Hat das dann irgendwelche Vor- oder Nachteile? Oder ist das nur Geschmacksache?



MmVisual schrieb:
Aus der Ausführbaren Datei werden alle zum Debug benötigte Infos in eine extra Datei ausgelagert, damit ist die eigentliche EXE deutlich kleiner.
Die dbg Datei kann jederzeit gelöscht werden und die EXE funktioniert auch ohne diese Datei. Nur kann man dann nicht mehr Debuggen.
Das bedeutet dann dass das was ich in der Konsole als Ausgabe sehe in der dbg steht?
Und wieso kann ich dann nicht mehr debuggen (also Breakpunkt setzen und eine Variable überwachen)? Die dbg wird doch bei jedem Mal kompilieren wieder neu angelegt. Hab ich da ein grundlegendes Verständnisproblem und man kann mit dem Debugger noch viel mehr machen?

Viele Grüße
Bernd

MmVisual
Beiträge: 1150
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Frage zu Debug Mode

Beitrag von MmVisual »

Die Debug-Informationen benötigt der Debugger um während dem Debuggen zu wissen welche Variable wo steht und diese entsprechend formatiert dem Lazarus während dem Debuggen übergeben zu können.
Ohne diese Informationen kann der Debugger also nicht mehr debuggen -> es ist dann auch nicht mehr möglich Breakpoints zu setzen, denn woher sonst soll der Debugger wissen bei welcher Codezeile der Code gerade ausgeführt wird, bzw. wenn man in einer Codezeile einen Breakpoint setzt muss der Debugger dies übersetzen in einen Programmspeicher, der nur Adressen hat.

wennerer
Beiträge: 253
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Frage zu Debug Mode

Beitrag von wennerer »

Okay,
das bedeutet dann die dbg wird von Lazarus erzeugt und benötigt um das debuggen zu ermöglichen. Ich selber mach damit gar nix.
Ich denke ich habe es jetzt begriffen :D

Vielen Dank
Bernd

martin_frb
Beiträge: 508
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: Frage zu Debug Mode

Beitrag von martin_frb »

wennerer hat geschrieben:
So 20. Dez 2020, 11:27
Und wieso kann ich dann nicht mehr debuggen (also Breakpunkt setzen und eine Variable überwachen)? Die dbg wird doch bei jedem Mal kompilieren wieder neu angelegt. Hab ich da ein grundlegendes Verständnisproblem und man kann mit dem Debugger noch viel mehr machen?
Wenn sie wieder da ist, kann man auch debuggen. Wenn man sie nach dem compilieren, bevor der Debugger startet löscht dann gehts nicht.

Oder wenn man die Exe ohne Debugger startet (dbg löscht), und dann "Attach" ausführt.
Für "Attach" könnte man die Exe sogar vorher in nen anderen Ordner kopieren, und dann darf man die .dbg Datei nicht vergessen.

Da man:
- zum Debuggen mit -O- (ohne Optimization) und -Criot (run time checks) kompilieren sollte
- zum Release mit -O2 oder -O3 und ohne/weniger Checks
sehe ich nicht warum man nicht Debug Info direkt in die Exe kompiliert. (ausser ggf remote debugging)

wennerer
Beiträge: 253
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Frage zu Debug Mode

Beitrag von wennerer »

Vielen Dank für die ausführliche Erklärung!
Als Hobbyprogrammierer musste ich erst mal nachlesen was "attach" bedeutet :D
ich denke vereinfacht könnte man sagen: sich an einen laufenden Prozess mit dem Debugger anhängen.
Ich werde zwar eher nicht gezwungen sein attach zu debuggen (hab ja immer meinen Quelltext), kann jetzt aber so ein bisschen den Sinn dahinter verstehen.
Trotzdem noch eine kleine Frage: Um eine Exe, fremde Exe (ich nenne es mal so obwohl ich in Linux arbeite) welche die Debugginformationen enthält oder wo eine .dbg dabei ist zu debuggen muss ich im Terminal den GNU-Debugger mit den passenden Optionen starten. Oder kann so was über Lazarus laufen?

Viele Grüße
Bernd

martin_frb
Beiträge: 508
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: Frage zu Debug Mode

Beitrag von martin_frb »

Grundsätzlich sollte sich das von Lazarus starten lassen.

Du brauchst ein Projekt, und musst folgendes konfigurieren (ide/lazarus.lpi ist genau so konfiguriert)
- Project wird NICHT kompiliert (damit die existierend exe benutzt wird)
- ggf Pfad zur exe

Dann startet die IDE die exe im Debugger.

Um allerdings etwas sinnvolles machen zu können braucht man den Quelltext.
Sonst wird es schwierig Breakpoints zu setzten.
(ggf Run > Add Breakpoint > Source >> und dann Filename und Line Nummer (muss man wissen) per Hand eingeben)


-------------------------
Die Debug Info enthält (kann enthalten)

1) Adresse <> Filename, Zeilennummer (Aber nicht den Quellcode der Zeile)
Der Debugger kann also ohne Source einen Stacktrace anzeigen. Aber um Pascal-Code zu sehen braucht man den Source.

2) Addresse <> Variable Name und Type-info
Watches und Locals funktionieren also auch ohne Source.

wennerer
Beiträge: 253
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Frage zu Debug Mode

Beitrag von wennerer »

Ich danke dir herzlich!
Werde mal mein Glück versuchen.

Viele Grüße
Bernd

martin_frb
Beiträge: 508
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: Frage zu Debug Mode

Beitrag von martin_frb »

Eine Hinweis noch.
Es gibt verschiedene Debug Info Formate.

Die IDE versteht Dwarf und Stabs, wenn der GDB debugger verwendet wird.
Mit FpDebug nur Dwarf.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4436
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Frage zu Debug Mode

Beitrag von af0815 »

Frage zu Debugmode. Ich habe Lazarus aus dem fixes Zweig und Breakpoints + F9 gehen. Die anderen Debuggingtasten aber nicht. Ist das nur im fixes so, oder schon im trunk besser. Ach ja, es tritt hauptsächlich bei großen Projekten unter Windows (10 - 32 bit compiler Dwarf mit sets) auf.

Was ist der aktuelle Stand ? Was geht am besten fürs debuggen (Windows oder Linux) ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

martin_frb
Beiträge: 508
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: Frage zu Debug Mode

Beitrag von martin_frb »

https://wiki.lazarus.freepascal.org/Debugger_Status

Step in/out/over sollten alle funktionieren.

Befinden sich (während die App im Debugger läuft) an jeder Zeile kleine blaue Punkte (vorne im Gutter wo auch die Breakpoints sind)?

Welcher Debugger? GDB basierend oder Fpdebug

Ausserdem: https://wiki.lazarus.freepascal.org/Debugger_Setup

Antworten