Diagnostiquer et corriger les erreurs en C.
Préparez le terrain :
-g: Ajoute les symboles (noms variables/lignes) pour GDB/Valgrind.-O0: Désactive l'optimisation pour un suivi clair.-fsanitize=address: Active la détection immédiate d'erreurs mémoire.
gcc -g -O0 -fsanitize=address prog.c -o debug_binPour les crashs (Segfault) ou surconsommation RAM.
Détecte fuites et accès invalides.
valgrind --leak-check=full ./progCibles : "definitely lost" (pas de free), "invalid read/write" (hors malloc).
Plus rapide. Stoppe net sur les Buffer Overflows (écrasement données voisines).
Quand une fonction déraille ou une variable change seule.
- Cause : Écriture hors limites d'un tableau local (ex: 12 octets dans un tab de 8).
- Effet : Écrase les variables ou l'adresse de retour.
Analyser logique ou crashs.
run: Lancer.break <lieu>: Point d'arrêt.step/next: Pas à pas (entre / survole fonction).print <var>: Voir valeur.display <var>: Voir valeur en continu.backtrace: Pile d'appels lors du crash (qui a appelé qui).
Quand ça bloque (freeze) ou résultats aléatoires.
Deux threads s'attendent.
- Lancer GDB, attendre le blocage,
Ctrl+C. info threads: Liste threads.thread apply all bt: Voir où ils coincent (souventpthread_mutex_lock).
Utiliser Helgrind :
valgrind --tool=helgrind ./prog| Symptôme | Outil |
|---|---|
| Crash / Segfault | GDB (bt) ou ASAN |
| Logique / Boucle fausse | GDB (display) |
| Fuite mémoire | Valgrind |
| Freeze / Blocage | GDB (info threads) |
| Variable folle | Vérifier débordement (Stack) |