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.
Strg-a a, um zur "normalen" Befehlszeilenansicht zurückzukehren!
Kevin
2
"- 'kann anstelle von' wh 'verwendet werden. kürzer je besser .. :)
raj_gt1
6
Ctrl-a a? Ist es ein Witz? Sieht eher nach tmux/ screencommand aus. Und funktioniert bei mir nicht. Es muss einer der folgenden sein wie pro docs : C-x C-a, C-x a, C-x A.
X-Yuri
Es ist tatsächlich C-x a. Sie können die Ansicht auch mit C-x 1und C-x 2im Tui-Modus wechseln, um auch die Baugruppe anzuzeigen (falls erforderlich).
Sam Whitlock
16
thread apply all btoder thread apply all print $pc: Um schnell herauszufinden, was alle Threads tun.
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.
Sie können die -iexOption auch verwenden , um einzelne Befehle in der GDB-Befehlszeile hinzuzufügen.
Doug65536
5
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.
Wie machst du das zum Standard? Ich habe es versucht .gdbinit, aber gdb druckt /home/omry/.gdbinit:1: Fehler in der Befehlsdatei: Das Ziel 'None' kann diesen Befehl nicht unterstützen.
Omry Yadan
4
Verwenden von .gdbinit (Startdatei, in der Sie Makros schreiben und von gdb aus aufrufen können). Platzieren Sie .gdbinit in Ihrem Home-Verzeichnis, damit es bei jedem Laden von gdb abgerufen wird
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
p / d 0x10 -> ergibt ein Dezimaläquivalent von 0x10
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.
Antworten:
quelle
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 undset print elements 0
sind zwei Befehle, die ich sehr oft benutze. Ziemlich nützlich.t a a bt
(Bedeutungthread apply all backtrace
). Kann mit (fast) allen anderen Befehlen verwendet werden. Besonders nützlich beibt full
.Starten Sie gdb mit einer Textbenutzeroberfläche
quelle
Ab GDB 7.0 gibt es ein reversibles Debugging . Ihre neuen Lieblingsbefehle sind also:
quelle
Anstatt GDB mit dem Parameter "-tui" zu starten, können Sie nach einiger Zeit auch in den Textmodus wechseln, indem Sie "wh" eingeben.
quelle
Ctrl-a a
? Ist es ein Witz? Sieht eher nachtmux
/screen
command aus. Und funktioniert bei mir nicht. Es muss einer der folgenden sein wie pro docs :C-x C-a
,C-x a
,C-x A
.C-x a
. Sie können die Ansicht auch mitC-x 1
undC-x 2
im Tui-Modus wechseln, um auch die Baugruppe anzuzeigen (falls erforderlich).thread apply all bt
oderthread apply all print $pc
: Um schnell herauszufinden, was alle Threads tun.quelle
Zum Beispiel die in stl-views.gdb definierten Makros
quelle
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.quelle
-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.
quelle
set scheduler-locking on
innerhalb gdbInfo-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
quelle
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.
quelle
focus cmd
damit die Aufwärts- / Abwärtspfeile funktionieren. Sie wechseln zurück mitfocus src
.Dies kann nützlich sein, ich bin mir jedoch sicher, dass es verbessert werden könnte.
quelle
Befolgen Sie zum Debuggen von STL den Inhalt zu .gdbinit und befolgen Sie die folgenden Anweisungen:
http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF
quelle