[Next] [Up] [Previous] [Contents] [Index]
Next: C++ Up: C - Grundlagen Previous: Compilieren

Debuggen

      Wir betrachen den folgenden C-Code:  
#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 exception
Wie 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) quit
Wir 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.
Mit dem Befehl cont kann der Programmlauf fortgesetzt werden und mit quit können wir den Debugger schließlich noch beenden.
Ersetzen wir jetzt Zeile 2 unseres Programmes durch
int j=1;
so können wir unser Programm wieder kompilieren und ohne Fehler ausführen.
lackas@antares:/home/lackas > gcc -o fehler fehler.c
lackas@antares:/home/lackas > fehler
Hello
10
Good Bye


[Next] [Up] [Previous] [Contents] [Index]
Next: C++ Up: C - Grundlagen Previous: Compilieren


Tue Dec 7 13:01:45 MET 1999