it-swarm.com.de

Die kniffligsten / nützlichsten Befehle für den GDB-Debugger

Können Sie Ihre kniffligsten und nützlichsten Befehle veröffentlichen, während Sie einen Debugger wie gdb oder dbx ausführen?.

136
Vijay
  1. backtrace full: Vervollständige den Backtrace mit lokalen Variablen
  2. hoch, runter, Frame: Durch die Frames navigieren
  3. watch: Unterbricht den Vorgang, wenn eine bestimmte Bedingung erfüllt ist
  4. setze print pretty on: Druckt schön formatierten C-Quellcode aus
  5. Anmeldung einstellen: Debugging-Sitzung protokollieren, um sie anderen zur Unterstützung anzuzeigen
  6. setze print array on: Hübscher Array-Druck
  7. Ende: Weiter bis zum Ende der Funktion
  8. enable und disable: Haltepunkte aktivieren/deaktivieren
  9. tbreak: Einmal unterbrechen und dann den Haltepunkt entfernen
  10. where: Zeilennummer, die gerade ausgeführt wird
  11. info locals: Alle lokalen Variablen anzeigen
  12. info args: Alle Funktionsargumente anzeigen
  13. Liste: Quelltext anzeigen
  14. rbreak: Pause bei der Funktion, die dem regulären Ausdruck entspricht
132
artagnon

Starten Sie gdb mit einer textuellen Benutzeroberfläche

gdb -tui
99
Amro

Ab gdb 7.0 gibt es 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.
43
Paul Biggar

Anstatt GDB mit dem Parameter "-tui" zu starten, können Sie auch nach einiger Zeit in den Textmodus wechseln, indem Sie "wh" eingeben.

20
martin

thread apply all bt oder thread apply all print $pc: Um schnell herauszufinden, was alle Threads tun.

14
Olof

Zum Beispiel die in stl-views.gdb definierten Makros

6
grigy

Verwendung der -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 für den Fall, dass eine bestimmte ausführbare Datei nacheinander mit gdb debuggt werden muss.

6
raghava

scripting GDB ist ein guter Trick, abgesehen davon, dass ich das Sperren des Schedulers gerne ein- und ausschalte, um zu verhindern, dass andere Threads ausgeführt werden, wenn Sie in einen dieser Threads einsteigen.

5
Ben

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, springen Sie mit C-xo und C-xa in diese Funktion hinein und aus ihr heraus. Dies ist hilfreich, wenn Sie die Funktion verwenden und wenn Sie sie vorübergehend nicht verwenden möchten, damit Sie mit dem Aufwärtspfeil einen vorherigen Befehl abrufen können.

4
Rose Perrone
  • Verwenden Sie .gdbinit (Starten Sie eine Datei, 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 (#) -> # Threadnummer, zu der Sie wechseln möchten

  • manchmal verwende ich gdb, um von hex zu dezimal oder binär zu konvertieren, es ist sehr praktisch, anstatt einen Taschenrechner zu öffnen

    • p/d 0x10 -> gibt das dezimale Äquivalent von 0x10 an
    • p/t 0x10 -> binäres Äquivalent von 0x10
    • p/x 256 -> Hexäquivalent von 256
3
subbul

Dies kann nützlich sein, ich bin mir jedoch sicher, dass es verbessert werden könnte.

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)
2
elmarco

Um STL zu debuggen, fügen Sie Inhalte zu .gdbinit hinzu, und folgen Sie diesen Anweisungen:

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

2
Bob Yoplait