Antworten:
info locals
- Alle lokalen Variablen anzeigen; Liste - Quelle anzeigen; rbreak - Unterbrechung der Funktion, die dem regulären Ausdruck entspricht.
set print object on
für polymorphe Elemente und set print elements 0
sind zwei Befehle, die ich sehr oft benutze. Ziemlich nützlich.
t a a bt
(Bedeutung thread apply all backtrace
). Kann mit (fast) allen anderen Befehlen verwendet werden. Besonders nützlich bei bt full
.
Starten Sie gdb mit einer Textbenutzeroberfläche
gdb -tui
Ab GDB 7.0 gibt es ein reversibles Debugging . Ihre neuen Lieblingsbefehle sind also:
* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.
Anstatt GDB mit dem Parameter "-tui" zu starten, können Sie nach einiger Zeit auch in den Textmodus wechseln, indem Sie "wh" eingeben.
C-x a
. Sie können die Ansicht auch mit C-x 1
und C-x 2
im Tui-Modus wechseln, um auch die Baugruppe anzuzeigen (falls erforderlich).
Zum Beispiel die in stl-views.gdb definierten Makros
Verwenden Sie die -command=<file with gdb commands>
Option beim Starten von gdb. Gleich wie -x <command file>
. Diese Befehlsdatei kann GDB-Befehle wie Haltepunkte, Optionen usw. enthalten. Nützlich, wenn eine bestimmte ausführbare Datei mit GDB aufeinanderfolgenden Debug-Läufen unterzogen werden muss.
-iex
Option auch verwenden , um einzelne Befehle in der GDB-Befehlszeile hinzuzufügen.
Das Scripting von GDB ist ein guter Trick, ansonsten mag ich es, die Scheduler-Sperre ein- und auszuschalten, um zu verhindern, dass andere Threads ausgeführt werden, wenn Sie in einen Thread eintreten.
set scheduler-locking on
innerhalb gdb
Info-Threads, um alle aktiven Threads aufzulisten, und f (#) -> # Thread-Nummer, zu der Sie wechseln möchten
Manchmal benutze ich GDB, um von Hex in Dezimal oder Binär zu konvertieren. Es ist sehr praktisch, anstatt einen Taschenrechner zu öffnen
Anstatt gdb mit der Option -tui zu starten, um einen untergeordneten Prozess anzuzeigen, der einen Bildschirm enthält, der hervorhebt, wo sich die ausführende Codezeile in Ihrem Programm befindet, können Sie mit Cx o und Cx a in diese Funktion ein- und aussteigen. Dies ist nützlich, wenn Sie die Funktion verwenden und vorübergehend nicht verwenden möchten, damit Sie mit dem Aufwärtspfeil einen vorherigen Befehl abrufen können.
focus cmd
damit die Aufwärts- / Abwärtspfeile funktionieren. Sie wechseln zurück mit focus src
.
Befolgen Sie zum Debuggen von STL den Inhalt zu .gdbinit und befolgen Sie die folgenden Anweisungen: