#include <stdio.h> int j; int main() { printf("Hello\n"); printf("%d\n",10/j); /* Gibt eine Zahl aus */ printf("Good Bye\n"); }Hier wird in Zeile 2 eine ganze Zahl (integer) j definiert. In Zeile 6 wird 10 durch die Zahl j dividiert und das Ergebnis ausgegeben. Speichern wir den Text unter fehler.c, so können wir die Datei mit gcc -g -o fehler fehler.c kompilieren. Die Compileroption -g ermöglicht es, das Programm mit einem Debugger zu behandeln. Aber erst wollen wir es einmal ausführen:
lackas@antares:/home/lackas > gcc -g -o fehler fehler.c lackas@antares:/home/lackas > fehler Hello Floating point exceptionWie wir sehen, brach das Programm mit einem Fehler ab. Wir wollen jetzt herausfinden, wo das Problem liegt. Dazu verwenden wir den GNU Debugger gdb, der zum Paket des C-Compilers dazugehört. Aternativ dazu kann man auch Debugger wie ddd [+], die ein graphische Benutzeroberfläche bieten. Hier reicht aber der einfache gdb.
lackas@antares:/home/lackas > gdb fehler GDB 4.16.patched (i686-PentiumII-Linux --target i686-Linux), Copyright 1996 Free Software Foundation, Inc... (gdb) run Starting program: /home/lackas/fehler Hello Program received signal SIGFPE, Arithmetic exception. 0x8048498 in main () at fehler.c:6 6 printf("%d\n",10/j); /* Gibt eine Zahl aus */ (gdb) cont Continuing. Program terminated with signal SIGFPE, Arithmetic exception. The program no longer exists. (gdb) quitWir starten den Debugger mit gdb fehler und landen dann in einem interaktiven Modus, in dem wir dem Debugger weitere Befehle geben können. Mit help erhält man eine kurze Erläuterung der Befehle, den Rest kann man der man-page entnehmen. Mit dem Befehl run weisen wir den Debugger an unser Programm zu starten, dieses gibt noch Hello aus und wird dann abgebrochen, weil es zu einem Fehler kam. Hier ist es eine Division durch 0, da unser j mit 0 vorinitialisiert wird. Der Debugger gibt und auch die Zeilennummer und die Zeile mit dem Fehler aus.
lackas@antares:/home/lackas > gcc -o fehler fehler.c lackas@antares:/home/lackas > fehler Hello 10 Good Bye