Der GNU Debugger gdb wird normalerweise mit dem zu untersuchenden
Programm als Parameter gestartet. Als weiterer Parameter kann auch hier ein
core dump angegeben werden.
gdb kann ein laufendes Programm unter seine Fittiche nehmen.
Dazu wird der gdb gestartet und der Befehl at oder
attach abgesetzt.
Der Prozess wird gestoppt und mit dem gdb verbunden.
attach PID
Alternativ können Sie die PID auch als zweiten Parameter beim Aufruf von
gdb angeben. Hier folgt ein Beispiel:
gaston> ps -ef | grep one
arnold 1339 1223 0 11:37 pts/3 00:00:00 one
gaston> gdb one 1339
GNU gdb 20010316
Copyright 2001 Free Software Foundation, Inc.
/home/arnold/my/src/unix/ipc/1339: No such file or directory.
Attaching to program: /home/arnold/src/unix/one, process 1339
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
0x400f3d64 in read () from /lib/libc.so.6
(gdb) next
Single stepping until exit from function read,
...
Dieses etwas gekürzte Protokoll zeigt, wie der Prozess one
unter die Kontrolle des Debuggers geholt wird. Zunächst wurde die PID
von one ermittelt und daraufhin gdb gestartet.
Sie können sehen, wie die Meldung des Copyright erscheint. Anschließend
versucht gdb , die Datei 1339 zu öffnen. Als das nicht funktioniert,
versucht er, den entsprechenden Prozess zu bekommen, was ihm auch gelingt.
Im Debugger gibt es diverse Befehle. Mit run können Sie das geladene
Programm starten, mit dem Befehl kill wieder stoppen. Mit
quit verlassen Sie den Debugger.
Um an den kritischen Stellen den Programmablauf unterbrechen zu können, setzen
Sie einen Breakpoint. Der Befehl break erwartet als Parameter
die Zeilenzahl im Listing oder einen Funktionsnamen. Die Zeilennummer ermitteln
Sie durch Auflisten des Programms, was gdb durch den Befehl
list ausführt.
Haben Sie den Breakpoint erreicht, können Sie mit den Befehlen step
oder next Schritt für Schritt das Programm durchlaufen. Dabei wird
step in aufgerufene Funktionen hinuntersteigen, was next
nicht tut. Mit continue lassen Sie das Programm weiterlaufen.
Wollen Sie einen Blick auf Variablen werfen, ist print dazu der
einfachste Befehl. Mit dem Befehl watch können Sie Variablen unter
Bewachung stellen. Dieser Befehl zeigt den Inhalt, sobald er sich ändert.
[Kommandos des GNU Debuggers]L|L
Kommando & Aktion
quit & Debugger verlassen
run & das geladene Programm starten
kill & stoppen des laufenden Programms
print Variable & Inhalt der Variablen anzeigen
watch Variable & Variable beobachten
list & zeigt einen Ausschnitt aus dem Sourcelisting
break Funktionsname & setzen eines Breakpoints
break Zeilennummer & setzen eines Breakpoints
clear Funktionsname & löscht einen Breakpoint
clear Zeilennummer & löscht einen Breakpoint
next & eine Zeile weitergehen
step & eine Zeile weiter und ggf. in eine Funktion hinein
continue & fortsetzen des angehaltenen Prozesses
|