Dies ist eine alte Version des Dokuments!
Ein guter Einstieg bietet auch dieses 20 Minuten Youtube Video
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_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 Realtime Performance von der Optimierung abhängig ist. Um die Applikation mit Debug Informationen aber ohne Optimierung zu bauen kann folgender Build Type verwendet werden:
CMAKE_BUILD_TYPE RelWithDebInfo
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 ..
)
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 |
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 |