Annexe B — Débogage et outils
Compilation avec symboles de débogage
gcc -g -Wall -Wextra -o prog mon_programme.c
| Option |
Rôle |
-g |
Inclut les symboles de débogage |
-Wall |
Active tous les avertissements courants |
-Wextra |
Avertissements supplémentaires |
-fsanitize=address |
Active AddressSanitizer (détection de dépassements) |
GDB — GNU Debugger
# Lancer GDB
gdb ./prog
# Commandes de base
(gdb) run # Exécuter le programme
(gdb) break main # Point d'arrêt à main()
(gdb) break fichier.c:42 # Point d'arrêt ligne 42
(gdb) next # Instruction suivante (sans entrer dans les fonctions)
(gdb) step # Instruction suivante (entre dans les fonctions)
(gdb) print variable # Afficher la valeur d'une variable
(gdb) backtrace # Pile d'appels (utile après un crash)
(gdb) continue # Continuer jusqu'au prochain point d'arrêt
(gdb) quit # Quitter GDB
Valgrind — Détection d'erreurs mémoire
# Détecter les fuites mémoire et erreurs d'accès
valgrind --leak-check=full --track-origins=yes ./prog
# Rapport type
==12345== HEAP SUMMARY:
==12345== in use at exit: 40 bytes in 1 blocks
==12345== total heap usage: 1 allocs, 0 frees, 40 bytes allocated
==12345==
==12345== LEAK SUMMARY:
==12345== definitely lost: 40 bytes in 1 blocks
AddressSanitizer (ASan)
gcc -fsanitize=address -g -o prog mon_programme.c
./prog
# Rapport immédiat en cas d'erreur mémoire
Macros de débogage utiles
#include <stdio.h>
#define DEBUG_PRINT(fmt, ...) \
fprintf(stderr, "[DEBUG %s:%d] " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__)
#define ASSERT(cond) \
if (!(cond)) { \
fprintf(stderr, "Assertion failed: %s at %s:%d\n", #cond, __FILE__, __LINE__); \
abort(); \
}
Conseils pratiques
- Compiler avec
-Wall -Wextra dès le début
- Utiliser
fprintf(stderr, ...) pour les messages de debug
- Tester régulièrement avec Valgrind sur Linux
- Utiliser ASan pour détecter les débordements de buffer