Guide pédagogique
GCC, Valgrind et Sanitizers sur Debian 12
Comment installer et utiliser GCC, GDB, Valgrind et AddressSanitizer sur Debian 12 pour détecter automatiquement les erreurs mémoire et produire du code C fiable.
Comment installer GCC sur Debian 12 ?
Sur Debian 12 : sudo apt update && sudo apt install build-essential
Ce méta-paquet installe GCC, G++, make et les en-têtes système. Vérifiez avec gcc --version.
Qu'est-ce que Valgrind et comment l'utiliser ?
Valgrind détecte les fuites mémoire, les lectures/écritures invalides et les use-after-free.
Installation : sudo apt install valgrind
Usage : valgrind --leak-check=full --track-origins=yes ./mon_programme
Note : Valgrind ralentit l'exécution d'environ 20×.
Qu'est-ce qu'AddressSanitizer (ASan) ?
AddressSanitizer est un runtime checker compilé via GCC. Il détecte les débordements de tampon, les use-after-free et les erreurs de stack.
gcc -fsanitize=address -g fichier.c -o prog
Il est environ 2× plus rapide que Valgrind et indique précisément le numéro de ligne des erreurs.
Comment activer UBSan (Undefined Behavior Sanitizer) ?
UBSan détecte les undefined behaviors : overflow entier signé, shift hors limites, déréférence NULL.
Compilation : gcc -fsanitize=undefined -g fichier.c
Combiné avec ASan : gcc -fsanitize=address,undefined -g
Le programme s'arrête dès qu'un UB est détecté avec un message explicite.
Comment déboguer avec GDB sur Debian 12 ?
Installation : sudo apt install gdb. Compilez avec -g : gcc -g -o mon_prog fichier.c
Lancement : gdb ./mon_prog
Commandes : run, break main, next/step, print var, backtrace, quit.
Comment mesurer la couverture de code en C ?
GCC inclut gcov. Compilez avec :
gcc -fprofile-arcs -ftest-coverage -O0 -g fichier.c
Exécutez, puis : gcov fichier.c. Rapport HTML avec lcov :
sudo apt install lcovlcov --capture --directory . --output-file cov.infogenhtml cov.info --output-directory html_cov/