Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3. Utiliser Valgrind pour établir un profil de l'utilisation de mémoire

Valgrind est un framework qui fournit l'instrumentation des binaires de l'espace utilisateur. Il est fournit avec un certain nombre d'outils pouvant être utilisés pour profiler et analyser les performances de programmes. Les outils décrits dans cette section offrent une analyse pouvant aider à la détection d'erreurs de mémoire telles que l'utilisation de mémoire non-initialisée et l'allocation ou la dés-allocation de mémoire incorrecte. Tous sont inclus dans le paquetage valgrind et peuvent être exécutés avec la commande suivante :
valgrind --tool=toolname program
Remplacez toolname par le nom de l'outil que vous souhaitez utiliser (pour profiler la mémoire, memcheck, massif, ou cachegrind) et program par le programme que vous souhaitez profiler avec Valgrind. Soyez conscient que l'instrumentation de Valgrind causera à votre programme de fonctionner plus lentement que normalement.
Un aperçu des capacités de Valgrind est offert dans la Section 3.5.3, « Valgrind ». Des détails supplémentaires, y compris des informations sur les plugins disponibles pour Eclipse, sont inclus dans le Guide du développeur, disponible sur http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. La documentation l'accompagnant peut être affichée avec la commande man valgrind lorsque le paquetage valgrind est installé ou trouvé dans les emplacements suivants :
  • /usr/share/doc/valgrind-version/valgrind_manual.pdf, et
  • /usr/share/doc/valgrind-version/html/index.html.

5.3.1. Profiler l'utilisation de mémoire avec Memcheck

Memcheck est l'outil Valgrind par défaut et peut être exécuté avec valgrind program, sans spécifier --tool=memcheck. Il détecte et rapporte un certain nombre d'erreurs de mémoire pouvant être difficiles à détecter et diagnostiquer, comme les accès mémoire qui n'auraient pas dû se produire, l'utilisation de valeurs non-définies ou non-initialisées, la libération incorrecte de la mémoire du tas, les pointeurs superposés et les fuites de mémoire. Avec Memcheck, les programmes fonctionnent dix à trente fois plus lentement que normalement.
Memcheck retourne des erreurs spécifiques selon le type de problème rencontré. Ces erreurs sont décrites en détails dans la documentation Valgrind incluse sur /usr/share/doc/valgrind-version/valgrind_manual.pdf.
Remarquez que Memcheck peut uniquement rapporter ces erreurs, il ne peut pas les empêcher de se produire. Si votre programme accède à la mémoire d'une manière qui aurait normalement résulté avec un défaut de segmentation, cette mauvaise segmentation se produira tout de même. Cependant, Memcheck journalisera un message d'erreur immédiatement avant la faute.
Memcheck fournit des options de ligne de commande pouvant être utilisées pour préciser le processus de vérification. Certaines des options disponibles incluent :
--leak-check
Lorsque activé, Memcheck recherches des fuites de mémoire quand le programme client se termine. La valeur par défaut est summary(sommaire), ce qui retourne le nombre de fuites découvertes. Les autres valeurs possibles sont yes (oui) et full (plein), qui offrent toutes deux des détails sur chaque fuite individuelle et no (non), qui désactive la vérification de fuites de mémoire.
--undef-value-errors
Quand activé (définit sur yes), Memcheck rapporte des erreurs lorsque des valeurs non-définies sont utilisées. Quand désactivé (définit sur no), les erreurs de valeurs non-définies ne sont pas rapportées. Cette option est activée par défaut. La désactiver accélère légèrement Memcheck.
--ignore-ranges
Permet à l'utilisateur de spécifier une ou plusieurs gammes que Memcheck devrait ignorer lors de la vérification de l'adressage. De multiples gammes sont délimitées par des virgules. Par exemple, --ignore-ranges=0xPP-0xQQ,0xRR-0xSS.
Pour une liste complète des options, veuillez vous reporter à la documentation incluse sur /usr/share/doc/valgrind-version/valgrind_manual.pdf.