Frage zu Debug Mode
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Frage zu Debug Mode
Hallo zusammen,
wenn ich ein Projekt im Debug Modus kompiliere nutze ich momentan nur das Konsolenfenster um Fehler zu erkennen.
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?
Viele Grüße
Bernd
wenn ich ein Projekt im Debug Modus kompiliere nutze ich momentan nur das Konsolenfenster um Fehler zu erkennen.
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?
Viele Grüße
Bernd
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Frage zu Debug Mode
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.
Die dbg Datei kann jederzeit gelöscht werden und die EXE funktioniert auch ohne diese Datei. Nur kann man dann nicht mehr Debuggen.
EleLa - Elektronik Lagerverwaltung - www.elela.de
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Frage zu Debug Mode
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
Projekt -> Projekteinstellungen -> Debuggen -> Debugger Info -> Use external debug symbols file
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Frage zu Debug Mode
Danke für die Antworten,
fliegermichl schrieb:
MmVisual schrieb:
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
fliegermichl schrieb:
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?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
MmVisual schrieb:
Das bedeutet dann dass das was ich in der Konsole als Ausgabe sehe in der dbg steht?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.
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
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Frage zu Debug Mode
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.
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.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Frage zu Debug Mode
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
Vielen Dank
Bernd
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

Vielen Dank
Bernd
-
- 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: Frage zu Debug Mode
Wenn sie wieder da ist, kann man auch debuggen. Wenn man sie nach dem compilieren, bevor der Debugger startet löscht dann gehts nicht.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?
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)
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Frage zu Debug Mode
Vielen Dank für die ausführliche Erklärung!
Als Hobbyprogrammierer musste ich erst mal nachlesen was "attach" bedeutet
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
Als Hobbyprogrammierer musste ich erst mal nachlesen was "attach" bedeutet

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
-
- 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: Frage zu Debug Mode
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.
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.
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Frage zu Debug Mode
Ich danke dir herzlich!
Werde mal mein Glück versuchen.
Viele Grüße
Bernd
Werde mal mein Glück versuchen.
Viele Grüße
Bernd
-
- 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: Frage zu Debug Mode
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.
Es gibt verschiedene Debug Info Formate.
Die IDE versteht Dwarf und Stabs, wenn der GDB debugger verwendet wird.
Mit FpDebug nur Dwarf.
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Frage zu Debug Mode
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) ?
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).
-
- 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: Frage zu Debug Mode
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
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