Ceci est une ancienne révision du document !
Valgrind
Présentation
Valgrind est une suite d'outils de profilage et de débuggage mémoire sous licence GPL, qui permet de détecter des problèmes de gestion mémoire dans des programmes écrits en C / C++. Plus généralement, Valgrind repose sur une architecture générique permettant la supervisation de programmes à l'aide de 3 principaux outils :
- Memcheck : un détecteur de fuites mémoires
- Callgrind : un simulateur de caches
- Callgrind : un profileur
La détection d'erreurs fonctionne de cette manière : le programme doit être lancé dans l'environnement de Valgrind. Toutes les entrées / sorties mémoires sont alors analysées et vérifiées minitieusement en interceptant tous les appels à (malloc|new) et (free|delete).
Pré-requis
- Avoir une connexion Internet fonctionnelle
- Avoir les dépôts Universe et Multiverse activés.
Installation
Il suffit d'installer le paquet apt://valgrind.
Utilisation
Dans ce qui suit, on considère un programme C compilé avec GNU / gcc : test. Ouvrez un terminal et suivez les instructions ci-dessous selon le test souhaité.
Détection de fuites mémoires
L'outil memcheck est l'outil de détection de fuites mémoires appelé par défaut. Il recherche les zones mémoires qui ne plus pointées et qui n'ont pas été désallouée (comportement par défaut).
Tapez par exemple la commande suivante pour lancer la détection d'erreurs sur test :
valgrind --tool=memcheck --leak-check=yes|no|full|summary --leak-resolution=low|med|high --show-reachable ./test
où le paramètre `leak-check' peut prendre les valeurs suivantes :
- no : ne fait rien.
- full / yes : donne des détails sur chaque fuite mémoire.
- summary : indique le nombre de fuites mémoires.
où le paramètre show-reachable étend la recherche aux zones encore pointées mais non désallouées.
où le paramètre leak-resolution indique le niveau de recherche des fuites mémoires.
Simulation de caches
L'outil cachegrind est un simulateur de cache I1/D1/L2. Il est possible de spécifier manuellement la configuration du cache à simuler. Pour chaque cache, on indique sa taille, l'associativité et la taille de la ligne. Les tailles doivent être données en octets.
Tapez par exemple la commande suivante pour lancer la simulation de 3 caches sur test :
valgrind --tool=cachegrind --I1=65535,2,64 --D1=65535,2,64 --L2=65535,2,64 ./test
Profilage
L'outil callgrind permet de d'effectuer un profilage poussé du programme en comptabilisant le nombre d'appels et les coûts associés.
Tapez par exemple la commande suivante pour lancer le profilage sur test :
valgrind --tool=callgrind ./test
Références
A titre informatif, voici quelques liens :
- Manuel Valgrind complet : http://valgrind.org/docs/manual/index.html
- Guide Valgrind de démarrage rapide : http://valgrind.org/docs/manual/QuickStart.html