Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:prg:debugger:gdb

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:NBreakpoint 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 VariablenNameZeigt 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
:!: Den Modus vor dem Start (oder Attach) des Programms setzen.
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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki