OK, info break listet die Haltepunkte auf, jedoch nicht in einem Format, das für die Wiederverwendung mit dem Befehl - wie in dieser Frage geeignet ist . Hat GDB eine Methode, um sie in eine Datei zu kopieren, die für eine erneute Eingabe akzeptabel ist? In einer Debugging-Sitzung muss GDB manchmal neu gestartet werden, nachdem eine Reihe von Haltepunkten zum Testen erstellt wurde.
Die .gdbinit-Datei hat das gleiche Problem wie --command. Der Befehl info break listet keine Befehle auf, sondern eine Tabelle für den menschlichen Verzehr.
Um dies zu erläutern, hier ein Beispiel aus der Infopause :
(gdb) info break Num Type Disp Enb Address What 1 Haltepunkt behalte y 0x08048517 <foo :: bar (void) +7>
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
set breakpoint pending on
wie beschrieben in der Beantwortung von Y in gdb-Skript und gdb: wie man Haltepunkte für zukünftige gemeinsam genutzte Bibliotheken mit einem --command-Flag setztbreak g_log if log_level==G_LOG_LEVEL_CRITICAL
mindestens gdb 7.8.1 das Parsen weiterer Befehle beendet , wenn Sie eine Haltepunktbedingung haben, die beim Start ( ) nicht behoben werden kann. Wenn Sie zusätzliche Befehle haben, die für diesen Haltepunkt ausgeführt werden sollen, setzen Sie diecommands
Zeile vor diecondition
Zeile.Diese Antwort ist veraltet. GDB unterstützt jetzt das direkte Speichern. Siehe diese Antwort .
Sie können die Protokollierung verwenden:
Die Datei break.txt enthält jetzt:
Das Schreiben eines AWK-Skripts, das dies in ein für die Datei
.gdbinit
oder eine--command
Datei nützliches Format umwandelt, ist einfach. Oder Sie können das Skript sogar separat--eval-command
von der GDB-Befehlszeile ausgeben lassen ...Das Hinzufügen dieses kleinen Makros zu .gdbinit hilft Ihnen dabei:
quelle
save breakpoints
Befehl verwenden.Fügen Sie Ihre GDB-Befehle und Haltepunkte so in eine .gdbinit-Datei ein, wie Sie sie möglicherweise an der
gdb>
Eingabeaufforderung eingeben , und GDB lädt sie beim Start automatisch und führt sie aus. Dies ist eine Verzeichnisdatei, sodass Sie unterschiedliche Dateien für unterschiedliche Projekte haben können.quelle
Eine Erweiterung von Anons Erweiterung zu Johannes 'Antwort :
Mit können
brestore
Sie dann die mit gespeicherten Haltepunkte wiederherstellenbsave
.quelle
Erweiterung der Antwort von Johannes : Sie können die Ausgabe von automatisch
info break
in eine gültige GDB-Befehlsdatei umformatieren :Danach haben Sie eine gültige Befehlsdatei in
brestore.gdb
.Dies hat bei mir funktioniert, wenn die Anwendung mit kompiliert wurde
-g
.Ich habe es auch erfolgreich mit GDB v6.8 unter Ubuntu 9.10 (Karmic Koala) getestet .
quelle
Vielleicht das:
save breakpoints [filename]
quelle
Fügen Sie Folgendes in ~ / .gdbinit ein , um bsave und brestore als GDB-Befehle zum Speichern und Wiederherstellen von Haltepunkten zu definieren.
quelle
Ich erhalte diesen Fehler / diese Warnung auch in GDB, wenn ich versuche, die Protokollierung im TUI- Modus zu aktivieren . Die Protokollierung scheint jedoch im "Nicht-TUI" -Modus zu funktionieren. Also verlasse ich den TUI-Modus, wenn ich etwas protokollieren möchte. (Mit Ctrl+X , Ctrl+A in den TUI-Modus wechseln .)
So arbeite ich:
set logging on
- Jetzt sollte es sich nicht beschweren.quelle
Ich fand den folgenden Zusatz zu einer vorherigen Antwort nützlich, um die Haltepunkte in einer bestimmten Datei zu speichern / laden.
Fügen Sie wie in der vorherigen Antwort den folgenden Code zur Datei ~ / .gdbinit hinzu
quelle
Das Problem ist, dass das Festlegen eines Haltepunkts kontextsensitiv ist. Was ist, wenn Sie zwei statische Funktionen namens foo haben ?
Wenn Sie bereits eines der Module debuggen, die foo definieren, geht GDB davon aus, dass Sie dieses gemeint haben. Wenn Sie jedoch nur "break foo" in eine Datei kopieren und diese Datei beim Start lesen, ist nicht klar, welche Funktion foo Sie meinen.
quelle
Irgendwelche anderen Ideen? ich habe
nach dem
BEARBEITEN:
Ich weiß, dass diese Frage lautet: "Wie speichere ich eine Liste von Haltepunkten?", Aber ich habe gerade festgestellt, dass wir mit GDB einfach Haltepunkte "in Datei gespeichert" setzen können
Wo
breakpoints.txt
ist eine Datei wie diese:quelle