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
| 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". | ||
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