Der GNU DeBugger - ein Tool zur Fehlersuche in (compilierten) Programmen.
Homepage: http://www.gnu.org/software/gdb/gdb.html
Lizenz: GPL
Tipps & Tricks
Howto für einen Stack Trace
Wenn ein Programm abstürzt oder sich merkwürdig verhält, kann man versuchen, dem mit dem Debugger auf die Schliche zu kommen - natürlich muß der Fehler reproduzierbar sein, sonst macht das alles keinen Sinn.
Diese Methode ist auch für ganz normale Anwender interessant und durchführbar. Man kann nichts kaputtmachen!
- Programm mit gdb starten
$ gdb /usr/bin/meinprogramm GNU gdb Red Hat Linux (5.3post-0.20021129.18rh) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... (no debugging symbols found)...
- Das Programm läuft jetzt unter der Kontrolle des Debuggers. Es wird nun gestartet.
(gdb) run Starting program: /usr/bin/meinprogramm
Bei run können auch die normalen Parameter für das Programm angegeben werden, z. B. run -hier "da" dort
- Das Programm wird jetzt ganz normal laufen. Wenn es ein Programm mit grafischer Oberfläche ist, werden Fenster usw. dargestellt. Deine Aufgabe ist es jetzt, den Fehler zu provozieren. Wenn das Programm dann abgestürzt ist, mache das Fenster NICHT zu! Stattdessen wechselt man ins gdb-Fenster und sieht dort z. B:
Program received signal SIGSEGV, Segmentation fault. 0xffffe002 in ?? () (gdb)
Die Addressen werden natürlich etwas anders aussehen. - Wir wollen jetzt sehen, was kurz vor dem Absturz passiert ist.
(gdb) backtrace
- Es erscheint so etwas:
#0 0xffffe002 in ?? () #1 0x08048f02 in __ctype_b_loc () #2 0x420156a4 in __libc_start_main () from /lib/tls/libc.so.6 (gdb)
Dies ist der interessante Teil. Diese Ausgaben sollte man an den Programmierer schicken, zusammen mit einer genauen Beschreibung dessen, was man gemacht hat.
- Jetzt beenden wir das Programm.
(gdb) kill Kill the program being debugged? (y or n) y (gdb) quit