Accueil🇫🇷Chercher

Valgrind

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

DĂ©bogueur

Il fut à l'origine conçu pour être une version libre de Purify (en) 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

Valgrind est, par essence, une machine virtuelle qui utilise de la compilation à la volée (just-in-time (JIT) compilation), incluant la recompilation dynamique. Aucune instruction du programme analysé n'est jamais exécutée directement sur le processeur hôte. En lieu et place, Valgrind commence par traduire le programme dans une représentation intermédiaire (RI) plus simple indépendante du processeur. Dans un deuxième temps, un outil (voir plus bas) réalise un certain nombre de transformations sur le RI avant que Valgrind ne retransforme ce RI en code machine pour le processeur hôte pour l’exécuter. Même s'il pouvait utiliser de la traduction dynamique, (i.e., la machine cible et hôte 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 qui permettent de debogger un programme cible s’exécutant dans Valgrind.

Ces transformations (ainsi que les manipulations des outils) donnent lieu à une importante perte de performance; La vitesse d’exécution peut être 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)

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 programme qui l'utilisent le plus.

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

Modules supplémentaires

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

  • None, exĂ©cute le code dans la machine virtuelle, sans faire aucune analyse. Cela permet d'avoir les empreintes mĂ©moire et performance les plus bas. Comme Valgrind affiche une pile complète lors d'une erreur de segmentation, l'outil none permet d'obtenir une telle pile pour un coĂ»t 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, dĂ©tecte les erreurs d’accès 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 graphe d'appel crĂ©Ă© par Josef Weidendorfer ajoutĂ© Ă  partir de la version 3.2.0. KCacheGrind permet aussi d'exploiter les mesures de cet outil.
  • Exp-sgcheck (prĂ©cĂ©demment nommĂ© Exp-ptrcheck avant la version 3.7), un outil expĂ©rimental pour identifier les erreurs de dĂ©bordement 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 dĂ©termine 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.

Notes et références

Annexes

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.