Valgrind

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Débogage mémoire / profilage (instrumentation binaire)
Commande valgrind
Contexte Détection de fuites mémoire et d'accès invalides, profilage cache/heap — ralentit énormément l'exécution, à réserver au dev/test, jamais en production
Voir aussi Strace (traçage syscalls, beaucoup plus léger)

Valgrind est un framework d'instrumentation binaire : il exécute le programme cible dans une machine virtuelle qui réécrit et surveille chaque instruction, ce qui permet de détecter des erreurs invisibles autrement (fuites mémoire, accès hors bornes, usage de mémoire non initialisée...). Cette approche est beaucoup plus intrusive que le simple traçage d'appels système, d'où un ralentissement très important de l'exécution.

⚠️ Valgrind ralentit énormément l'exécution du programme (facteur x10 à x50 selon l'outil) : à utiliser en développement ou en test, jamais sur un système de production.

Installation

yum install valgrind      # RHEL/CentOS
apt install valgrind      # Debian/Ubuntu

Utilisation générale

valgrind --tool=<nom_outil> programme [arguments]

Si --tool est omis, Valgrind utilise memcheck par défaut.

Memcheck (détection de fuites mémoire)

Outil par défaut, le plus utilisé : détecte les fuites mémoire, les accès à de la mémoire déjà libérée, les lectures de mémoire non initialisée, etc.

valgrind --tool=memcheck --leak-check=full --show-reachable=yes programme
  • --leak-check=full : affiche la pile d'appel de chaque fuite détectée (pas seulement un résumé).
  • --show-reachable=yes : affiche aussi les blocs encore atteignables en fin d'exécution mais jamais libérés.

Pour journaliser la sortie dans un fichier plutôt que sur la console (utile pour un run long ou un post-traitement) :

valgrind --log-file=./logfile.val --leak-check=full --show-reachable=yes -v programme

Autres outils

valgrind --tool=cachegrind programme   # profilage des accès cache L1/L2
valgrind --tool=massif programme       # profilage de l'occupation heap/stack dans le temps

La sortie de massif (fichier massif.out.<pid>) se lit avec ms_print massif.out.<pid> pour obtenir un graphe texte de la consommation mémoire au fil du temps.

Voir aussi

  • Strace — trace les appels système au niveau du noyau : approche complémentaire et bien plus légère, puisque Valgrind fait de l'instrumentation binaire (réécriture du code exécuté dans une VM) alors que strace se contente d'observer les interactions avec le noyau, sans le même ralentissement.