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 outils principaux :
- Un détecteur d'erreurs mémoires
- Un profileur basé sur le temps d'exécution
- Un profileur basé sur la mémoire
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
où {valeur} peut prendre les valeurs suivantes :
- full / yes : donne des détails sur chaque fuite mémoire
- summary : indique le nombre de fuites mémoires
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