Dies ist eine alte Version des Dokuments!


Crashcourse gdb

Tutorial

Ein guter Einstieg bietet auch dieses 20 Minuten Youtube Video

gdb cheat sheet

Vorbereitung

Damit eine Applikation mit dem gdb debugged werden kann, muss es mit Debug Symbolen kompiliert werden. Dazu kann für nicht Realtime Applikationen der „Build type“ auf 'Debug' gesetzt werden:

CMAKE:
CMAKE_BUILD_TYPE Debug

Dadurch werden Debugsymbole hinzugefügt und die Applikation wird nicht optimiert. Nicht optimierte Applikationen vereinfachen das Debugging, da das nicht optimierte Binary grössten teils dem Sourcecode entspricht. Mit Optimierung können einzelne Variablen wegoptimiert werden.

Realtime Applikationen dürfen aber normalerweise nicht optimiert werden, da die TODO

gcc / g++
gcc -g hello.c
g++ -g hello.c

gdb öffnen

gdb öffnen:
gdb –args <executable_name> <arg1> <arg2> <arg3>

oder ohne Argumente:
gdb <executable_name>

Um die Applikation mit Root Rechten zu starten, muss der gdb ebenfalls mit Root Rechten gestartet werden (sudo gdb ..)

Weitere nützliche Befehle

Befehl Bedeutung
run Startet die Applikation im gdb
kill Bricht die Applikation ab
quit beendet die Applikation
help
list Zeigt den Sourcecode an
b <18> Breakpoint @ Zeile 18
b if x==1 Breakpoint mit Bedingung
print x Zeigt den Inhalt der Variable
info locals Alle Informationen über lokale Variablen
set var <variablenname> = <value> Variable setzen
backtrace backtrace z.B. bei Segfault
attach <PID> den gdb an eine laufende Applikation anhängen

SIGINT ohne 'Break' vom gdb

Ctrl+c sendet SIGINT an die Applikation. Sobald das geschieht, pausiert der gdb Dies kann aber verhindert werden.

Befehl Bedeutung
info signals Zeigt das aktuelle Verhalten bei diversen Signalen an
handle 2 nostop gdb pausiert nicht mehr bei einem Interrupt Signal