edv:prg:debugger:gdb
Inhaltsverzeichnis
GDB
Aktuelle Version ist die 8.1 (Stand: 02.02.2018).
Programm in den Debugger GDB laden:
gdb /Pfad/ProgrammName
Mit dem Parameter -tui startet man GDB im TUI-Modus (TextUserInterface):
gdb -tui /Pfad/ProgrammName
Um ein CoreDump zu untersuchen, braucht man beides - die ausführbare Datei und das CoreDump selbst:
gdb /Pfad/ProgrammName /Pfad/CoreDump
Kurzübersicht von GDB-Kommandos
Kommando | Beschreibung | Beispiel | Kommentar |
---|---|---|---|
attach PID | In einen bereits laufenden (falls notwendig) Prozeß (mit PID) einklinken. | attach 254 | Der GDB muss mit "gdb /Pfad/ProgrammName" bereits gestartet sein. Oder gleich beim GDB-Start in den Prozeß einklinken: "gdb /Pfad/ProgrammName 254". |
set directory Pfad | Setzt den Pfad zu den Quelltexten. | set directory /Pfad/zum/Source | |
show directories | Zeigt den Pfad zu den Quelltexten. | ||
list | Mehrere Codezeilen anzeigen. | Wiederholt ausgeführt, wird die nächste Portion des QuellCodes ausgegeben. | |
break N | Breakpoint in die Zeile N setzen. | break 19 | Setzt den Breakpoint an die Zeile 19. |
break FunktionName | Breakpoint auf die Funktion FunktionName setzen. | break main | |
break FileName.c:N | Breakpoint in die Zeile N im File FileName.c setzen. | break foo.c:38 | |
break N if (Ausdruck) | Breakpoint in die Zeile N setzen, angehalten wird aber nur wenn der Ausdruck wahr ist. | break 184 if (status == 0) | "status" muß entweder eine globale Variable oder eine lokale Variable aus dem aktuellen Stack Frame sein. |
clear FunktionName clear FileName:FunktionName | Alle Breakpoints aus der Funktion FunktionName entfernen. | ||
clear N clear FileName:N | Breakpoint aus der Zeile N im File FileName entfernen. | ||
delete N | Breakpoint mit der Nr. N entfernen. | Die Nummern mit info break herausfinden. | |
info break | Liste aller Breakpoints und Watchpoints samt ihrem Status anzeigen lassen. | ||
help break | Überblick über die komplette Syntax von "break". | ||
watch | Setzt einen Watchpoint (Beobachtungspunkt). | ||
run Argumente | Startet das Programm. | ||
next | Einzelschrittmodus, geht bis zur nächsten Codezeile in derselben Funktion. | ||
step | Einzelschrittmodus, geht in die Funktion rein. | ||
bt oder backtrace | Gibt das TraceFrame (Call Stack) aus. | Die unterste Funktion ist i.d.R. die main(). | |
until N | Den Code (ohne Unterbrechnungen) bis zur Zeile N ausführen. | until 27 | Führt den Code aus und hält anschließend in der Zeile 27. |
continue | Programm weiter laufen zu lassen. | ||
print VariablenName | Zeigt den Wert einer Variablen an. | …oder den Wert eines Funktionsaufrufs: (gdb) print getpid() …oder auch einen Wert zuweisen: (gdb) print mydisplay->vendor = "Linux" |
|
ptype | Detaillierte Informationen über den Typ einer Variablen oder die Definition von struct- und typedef-Anweisungen. | ||
x | Arbeitsspeicher untersuchen. "x" akzeptiert eine Speicheradresse (z.B. Variablenname) als Argument. | Beispiel: (gdb) x mydisplay→vendor 0x9de70 <_end+35376>: 76 'L' (gdb) x/6c mydisplay→vendor 0x9de70 <_end+35376>: 76 'L' 105 'i' 110 'n' 117 'u' 120 'x' 0 '' (gdb) x/s mydisplay→vendor 0x9de70 <_end+35376>: "Linux" (gdb) | |
finish | Die Funktion bis zu ihrem Ende ablaufen lassen. | ||
info Option | Zeigt Informationen (je nach Option) über den Status des analysierten Programms an. | ||
info program | Informationen zum Ablaufstatus des Programms. | ||
info locals | Namen und Werte aller lokalen Variablen in der aktuellen Funktion anzeigen lassen. | ||
info frame | Informationen über den aktuellen Stack Frame. | ||
help info | Alle Unterbefehle von info anzeigen lassen. | ||
quit | GDB verlassen. | ||
Thread-Kommandos | Beschreibung | Beispiel | Kommentar |
info threads | Infos über existierende Threads anzeigen. | ||
thread Thread-ID | Zum Thread mit der "Thread-ID" wechseln. | ||
maint info sol-threads | Infos über Solaris-User-Threads anzeigen. | Solaris-spezifisch. | |
thread name Name | Dem aktuallen Thread einen Namen "Name" zuweisen. Ohne Argument aufgerufen, wird der vorher zugewiesene Name entfernt. | Auf diese Weise gesetzte Namen werden durch das Kommando "info threads" angezeigt. | |
all-stop mode | |||
show scheduler-locking | Zeigt den aktuellen SchedulerLocking-Modus an. | ||
set scheduler-locking mode | Setzt den SchedulerLocking-Modus auf den Wert mode: "off", "on" oder "step". | off - kein Locking, alle Threads können laufen wie sie wollen. on - nur der aktuelle Thread läuft, die anderen werden angehalten. step - optimisiert für single-stepping. Das hindert andere Threads am Nebenlauf mit dem aktuellen Thread während Sie schrittweise debuggen, so dass der Debugger nicht von einem zu dem anderen Thread springt. |
|
show schedule-multiple | |||
set schedule-multiple mode | |||
non-stop mode | |||
set pagination off set non-stop on | |||
show non-stop | Zeigt den aktuellen NonStop-Modus an. | ||
set non-stop mode | Setzt den NonStop-Modus auf den Wert mode: "off" oder "on". |
Infos zu GDB
The GNU Project Debugger: https://www.gnu.org/software/gdb/
Einige interessante Ansätze mit GDB: https://www.oreilly.de/german/freebooks/rlinux3ger/ch142.html (wie z.B. "Eine Core-Datei analysieren")
CGDB - the curses debugger: http://cgdb.github.io/
Stand: 21.03.2017
EOF
edv/prg/debugger/gdb.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1