gdb - GNU debugger


Unterpunkte dieser Seite

Einleitung
Was muss ich tun damit ein Programm mit gdb debugged werden kann ?
Breakpoints mit break
Navigation im Sourcecode
Stackframe betrachten mit backtrace
Variableninhalte betrachten mit print
Shelleingaben in gdb mit shell
Assembler Programme debuggen

Einleitung

Der gdb überwacht Programme während ihrer Ausführung und erlaubt es Fehler aufzuspüren. gdb ist ein Kommandozeilentool, es gibt jedoch unter anderem das Frontend ddd, mit dem man ein GUI zum gdb erhält. Der gdb kann als Parameter das Programm erhalten, das er überwachen soll. Damit startet man den gdb wie folgt:
gdb programm
gdb zeigt nun einen Prompt und wartet auf Eingaben. Durch die Eingabe von quit verlässt man gdb.

Alternativ kann man gdb auch mit der Option -tui starten oder das äquivalente Kommando gbdtui verwenden. gdb zeigt nun einige Fenster in der Shell an, die einem die Arbeit ein wenig erleichtern.
gbdtui Programm

Was muss ich tun damit ein Programm mit gdb debuggt werden kann ?

Das Programm muss mit sogenannten Debug-Informationen compiliert werden. Dazu muss man die Dokumentation des Compilers oder der IDE konsultieren, mit der man arbeitet. Wenn man Assembler Programme mit NASM unter Linux schreibt, dann hat man ein Problem, da NASM keine Debugsymbole und keine Debug-Information erzeugen kann. Daher muss man folgenden Umweg gehen. Man schreibt das Programm und erzeugt eine Objektdatei mit Hilfe das NASM Assemblers. Danach linkt man die Objektdatei mit dem gcc Compiler. Der gcc Compiler kann Debug-Information erzeugen, indem man ihm die -g Option mitgibt. Die Vorrausstzung ist allerdings, das der Haupteinsprungpunkt des Programms main heißt, da gcc das Programm sonst nicht linken kann. Die von gcc erzeugte Ausführbare Datei hat nun Debug-Information und kann mit gdb ausgeführt werden.
nasm -f elf hello.s
gcc -g -o hello hello.o

gdb hello
(gdb) break main
(gdb) set disassembly-flavor intel
(gdb) disassemble main
(gdb) run
(gdb) info registers
(gdb) q
(gdb) y

Breakpoints mit break

Navigation im Sourcecode

Durch einen Druck auf n springt man in die nächste Quellcodezeile, dabei wird nicht in Funktionen hinein verzweigt. Durch einen Druck auf s wird die nächste Anweisung ausgeführt, dabei betritt gdb auch Funktionen und führt Anweisungen in diesen Funktionen aus.

Stackframe betrachten mit backtrace

Der backtrace (auch bt) Befehl, zeigt einen Teil des Stacks der Funktion an, in der man sich gerade befindet.

Variableninhalte betrachten mit print

gdb gibt den Inhalt einer Variable mit dem Befehl print (auch p) aus. Dazu tippt man
p Variablenname
ein. Alternativ dazu hat print auch eine überaschende weitere Funktionalität. Mit print kann man Variablen neue Werte zuweisen. Dazu gibt man ein:
p Variablenname=Wert
Wert kann auch ein Ausdruck sein, der dann von gdb ausgewertet wird.

Der Befehl inspect ist ein Synonym von print.

Shelleingaben in gdb mit shell

Assembler Programme debuggen

set language asm


zum Seitenanfang
zur Hauptseite

Letzte Änderung: 10.06.2006