Aller au contenu

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