{{tag>Xenial programmation}} ---- ====== Valgrind ======= **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 (option par défaut) * **Cachegrind** : 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 minutieusement en interceptant tous les appels à (malloc|new) et (free|delete). **Valgrind** n'est pas capable de détecter certaines anomalies liées au code. Par exemple, il ne permet pas de vérifier les indices hors tableau sur des tableaux déclarés en statique. ===== Pré-requis ===== * Disposer des [[:sudo|droits d'administration]]. * Disposer d'une connexion à Internet configurée et activée. ===== Installation ===== il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>valgrind]]**. ===== Utilisation ===== Dans ce qui suit, on considère un programme C compilé avec l'option -g, que l'on appelle **test**. Ouvrez un terminal et suivez les instructions ci-dessous selon l'outil désiré. ==== Détection de fuites mémoires ==== **memcheck** est un outil de détection de fuites mémoires appelé par défaut. Il recherche les zones mémoires qui ne sont plus pointées et qui n'ont pas été désallouées (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=yes ./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 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 ===== Interfaces graphiques ===== * [[apt>Kcachegrind]] (dans les dépôts) permet de visualiser graphiquement les rapports de valgrind * Il existe une extension qui permet d'intégrer la plupart des outils valgrind (memcheck, massif, cachegrind, mais pas callgrind) dans eclipse. [[http://www.eclipse.org/linuxtools/projectPages/valgrind/]] Rentrer l'adresse [[http://download.eclipse.org/technology/linuxtools/update]] dans help/software updates . * [[apt>Alleyoop]] (dans les dépôts) permet de visualiser graphiquement les rapports de valgrind, et aide à la correction. ===== Désinstallation ===== Pour supprimer cette application, il suffit de [[:tutoriel:comment_supprimer_un_paquet|supprimer son paquet]]. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés. ===== Références ===== A titre informatif, voici quelques liens : * Manuel **Valgrind** complet : [[https://valgrind.org/docs/manual/index.html]] * Guide **Valgrind** de démarrage rapide : [[https://valgrind.org/docs/manual/QuickStart.html]] * http://www.siteduzero.com/tutoriel-3-473022-debuguer-facilement-avec-valgrind.html ---- //Contributeurs: [[utilisateurs:nicolas66]]//