Kompilieren und Debuggen von C-Programmen
In diesem Schritt lernen Sie essentielle Kompilierungs- und Debugging-Techniken für C-Programme kennen, einschließlich des Verständnisses von Compiler-Warnungen, der Verwendung von Kompilierungs-Flags und grundlegender Debugging-Strategien.
Erstellen eines Programms mit absichtlichen Fehlern
- Öffnen Sie die WebIDE und erstellen Sie eine neue Datei mit dem Namen
debug.c
.
- Geben Sie den folgenden Code mit einigen absichtlichen Fehlern ein:
#include <stdio.h>
int main() {
int x = 10;
int y = 0;
// Intentional division by zero
int result = x / y;
printf("Result: %d\n", result);
// Unused variable
int z = 5;
return 0;
}
Kompilieren mit Warnungen
Kompilieren Sie das Programm mit zusätzlichen Warnungs-Flags:
gcc -Wall -Wextra debug.c -o debug
Erklärung der Kompilierungs-Flags
-Wall
: Aktiviert die meisten Warnungsmeldungen
-Wextra
: Aktiviert noch detailliertere Warnungen
Beispiel der Compiler-Ausgabe:
debug.c: In function ‘main’:
debug.c:13:9: warning: unused variable ‘z’ [-Wunused-variable]
13 | int z = 5;
| ^
Verwenden von GDB zum Debuggen
Kompilieren Sie mit Debugging-Symbolen:
gcc -g debug.c -o debug
Starten Sie das Debugging:
gdb./debug
GDB-Befehle:
run
: Starten Sie das Programm
break main
: Setzen Sie einen Breakpoint in der Hauptfunktion
print x
: Geben Sie den Wert der Variablen x aus
next
: Führen Sie die nächste Zeile aus
quit
: Beenden Sie GDB
(gdb) run
Starting program: /home/labex/project/debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGFPE, Arithmetic exception.
0x0000555555555167 in main () at debug.c:8
8 int result = x / y;
(gdb) print x
$1 = 10
(gdb) break main
Breakpoint 1 at 0x555555555155: file debug.c, line 4.
(gdb) next
Program terminated with signal SIGFPE, Arithmetic exception.
The program no longer exists.
(gdb) quit
GDB zeigt einen Fehler bei der Division durch Null in Zeile 8 an. Das Programm stürzt aufgrund einer arithmetischen Ausnahme ab.
Beheben des Programms
Ändern Sie debug.c
, um die Division sicher zu handhaben:
#include <stdio.h>
int main() {
int x = 10;
int y = 2; // Change from 0 to a non-zero value
if (y!= 0) {
int result = x / y;
printf("Result: %d\n", result);
} else {
printf("Error: Division by zero!\n");
}
return 0;
}
Kompilieren Sie erneut und führen Sie das Programm aus:
gcc -Wall -Wextra debug.c -o debug
./debug
Ausgabe:
Result: 5
Fehlerbehebungstipps:
- Kompilieren Sie immer mit
-Wall -Wextra
- Achten Sie auf Compiler-Warnungen
- Verwenden Sie GDB für komplexe Debugging-Szenarien
- Fügen Sie Fehlerprüfungen für potenzielle Laufzeitprobleme hinzu