Valgrind

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Valgrind
Logo
Logo

Développeur Julian Seward
Dernière version 3.9.0 () [+/-]
Environnement GNU/Linux, Mac OS X
Licence GNU GPL 2
Site web valgrind.org

Valgrind (prononcé [vælɡrɪnd], et non [vælɡraɪnd][1]) est un outil de programmation libre pour déboguer, effectuer du profilage de code et mettre en évidence des fuites mémoires.

Débogueur[modifier | modifier le code]

Il fut à l'origine conçu pour être une version libre de Purify sous GNU/Linux, sur architecture x86. Il a aujourd'hui évolué, en devenant un framework générique pour la création d'outils dynamiques comme des « checkers » et « profilers ». Il a une excellente réputation et est largement répandu parmi les programmeurs GNU/Linux.

Valgrind est un logiciel modulaire. Parmi les modules on trouve par exemple Memcheck, qui permet de débusquer les failles dans un programme au niveau de l'utilisation de la mémoire. Memcheck vérifie entre autres :

  • Que l'on n'utilise pas de valeurs ou de pointeurs non initialisés ;
  • Que l'on n'accède pas à des zones mémoire libérées ou non allouées ;
  • Que l'on ne libère pas deux fois une zone mémoire ;
  • Que l'on n'oublie pas de libérer la mémoire allouée. Des options permettent de connaître avec précision les zones de mémoire qui sont perdues ;
  • Que l'on passe des arguments valides à certaines fonctions de la bibliothèque standard comme la fonction memcpy().

Généralités[modifier | modifier le code]

Valgrind est, par essence, une machine virtuelle qui utilise de la compilation a la volée (just-in-time (JIT) compilation), incluant la recompilation dynamique. Aucune instruction du programme analysé n'est jamais éxécutée directement sur le processeur hote. En lieu et place, Valgrind commence par traduire le programme dans une representation intermediaire (RI) plus simple indépendente du processeur. Dans un deuxième temps, un outil (voir plus bas) réalise un certain nombre de transformation sur le RI avant que Valgrind ne retransforme ce RI en code machine pour le processeur hote pour l'executer. Même s'il pourrait utiliser de la traduction dynamique, (ie, la machine cible et hote sont d'architecture différente), Valgrind ne le fait pas. Valgrind recompile le code binaire pour des architectures qui sont identiques. Valgrind fournit aussi des points d'entrée pour GDB permettent de debogger un programme cible s'executant dans Valgrind,

Ces transformations (ainsi que les manipulation des outils) donnent lieu à une importante perte de performance; La vitesse d'execution peut etre de 3 à 50 fois plus lente que sans valgrind (tout dépend de l'outil passé et des sources de la mesure).

Analyseur de performance (Profileur)[modifier | modifier le code]

Le module Cachegrind permet de mettre en évidence les défauts de cache qui ralentissent l'exécution du programme.

Le module Massif permet de suivre l'utilisation de la pile et de déterminer les parties du programmes qui l'utilisent le plus.

Le module CallGrind permet de compter le nombre d'appel pour toutes les routines d'un programme durant son exécution, ainsi que le temps passé dans la routine.

Modules supplémentaires[modifier | modifier le code]

Grâce à son architecture modulaire, de nombreux modules tiers ont été écrits pour satisfaire des besoins divers.

  • None, execute le code dans la machine virtuelle, sans faire aucune analyse. Cela permet d'avoir les empreintes memoire et performance les plus bas. Comme Valgrind affiche une pile complete lors d'une erreur de segmentation, l'outil none permet d'obtenir une tlle pile pour un cout minimal.
  • Addrcheck, similaire à Memcheck mais avec une empreinte mémoire et CPU réduite, mais identifie moins de dysfonctionnements. Addrcheck a été supprimé à partir de la version 3.2.0.
  • Massif, un profileur du tas. L'interface graphique massif-visualizer permet d'afficher les mesures issues de Massif.
  • Helgrind et DRD, detecte les erreurs d'acces concurrents dans le code multithreadé
  • Cachegrind, un profileur du cache. L'outil graphique KCacheGrind permet de visualiser les mesures issues de Cachegrind.
  • Callgrind, un analyseur de graph d'appel créé par Josef Weidendorfer ajouté à partir de la version 3.2.0. KCacheGrind permet aussi d'eploiter les mesures de cet outil.
  • exp-sgcheck (precedement nommé exp-ptrcheck avant la version 3.7), un outil experimental pour identifier les erreurs de debordement de de tableau sur la pile ou dans le segment statique. En effet, Memcheck ne permet pas de détecter ces erreurs. Cet outil peut rapporter des faux positifs.
  • exp-dhat, un analyseur de tas dynamique qui determine la quantité de mémoire allouée et sur quelle durée ainsi que des patrons d'utilisation de la mémoire.

Beaucoup d'autres outils externes existent aussi, utilisant la machine virtuelle de valgrind pour réaliser des mesures diverses.

Articles connexes[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Références[modifier | modifier le code]

  1. (en) « Valgrind Frequently Asked Questions - 1.1. How do you pronounce "Valgrind"? », Valgrind.org.