Compiler et déboguer des programmes C
Dans cette étape, vous apprendrez les techniques essentielles de compilation et de débogage pour les programmes C, notamment la compréhension des avertissements du compilateur, l'utilisation d'indicateurs de compilation et les stratégies de débogage de base.
Créer un programme avec des erreurs intentionnelles
- Ouvrez le WebIDE et créez un nouveau fichier nommé
debug.c
.
- Entrez le code suivant avec quelques erreurs intentionnelles :
#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;
}
Compiler avec des avertissements
Compilez le programme avec des indicateurs d'avertissement supplémentaires :
gcc -Wall -Wextra debug.c -o debug
Explication des indicateurs de compilation
-Wall
: Active la plupart des messages d'avertissement
-Wextra
: Active des avertissements encore plus détaillés
Exemple de sortie du compilateur :
debug.c: In function ‘main’:
debug.c:13:9: warning: unused variable ‘z’ [-Wunused-variable]
13 | int z = 5;
| ^
Utiliser GDB pour le débogage
Compilez avec des symboles de débogage :
gcc -g debug.c -o debug
Démarrez le débogage :
gdb./debug
Commandes GDB :
run
: Démarrer le programme
break main
: Définir un point d'arrêt à la fonction principale
print x
: Afficher la valeur de la variable x
next
: Exécuter la ligne suivante
quit
: Quitter 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 montre une erreur de division par zéro à la ligne 8. Le programme plante en raison d'une exception arithmétique.
Corriger le programme
Modifiez debug.c
pour gérer la division en toute sécurité :
#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;
}
Recompilez et exécutez :
gcc -Wall -Wextra debug.c -o debug
./debug
Sortie :
Result: 5
Conseils de dépannage :
- Toujours compiler avec
-Wall -Wextra
- Prêtez attention aux avertissements du compilateur
- Utilisez GDB pour les scénarios de débogage complexes
- Ajoutez des vérifications d'erreur pour les problèmes potentiels à l'exécution