Comment utiliser Valgrind C ++

Comment utiliser Valgrind C ++
Valgrind est un détecteur de mauvaise gestion de la mémoire. Nous pouvons connaître les fuites de mémoire et les erreurs de trafic. C'est un code de polyvale. Il est également connu pour être un outil de débogage de mémoire pour Linux. Ce détecteur a une caractéristique importante de l'exécution de votre programme dans l'environnement de la mémoire de Valgrind et surveille également l'utilisation de la mémoire. Si, dans certains cas d'écriture d'un code, une telle situation se produit lorsque vous utilisez la mémoire qui n'est pas encore initialisée, ou que vous oubliez de libérer le pointeur, ces effets causés par l'erreur sont détectés par Valgrind. Cet article se concentrera principalement sur l'utilisation de Valgrind pour détecter ce genre de problèmes.

Valgrind est dépendant du système d'exploitation car il est exécutable uniquement du système d'exploitation Linux. Valgrind est une collection d'outils de détection de mémoire qui sont tous open source. Il est largement utilisé et plus puissant que d'autres outils comme memwatch, mtrace, etc., qui remplissent les mêmes fonctions que Valgrind. Bien que C ++ soit un langage de programmation très puissant et utile, il nécessite beaucoup de pouvoir pour le débogage et l'exécution. Pourtant, parfois des erreurs de mémoire se produisent, ce qui est un problème spécifique. De même, il existe une autre erreur qui est une fuite de mémoire. Valgrind est un programme spécifique qui vous aide à résoudre les deux problèmes.

Installation de Valgrind

Lorsque vous travaillez sur la plate-forme Linux, de nombreux nouveaux programmes sont nécessaires pour exécuter des programmes particuliers sur ce système d'exploitation. Par exemple, lors de l'utilisation d'un terminal, vous avez besoin d'un snap, apte pour effectuer de nombreuses autres installations logicielles. De même, Valgrind est également installé sur le terminal en utilisant une commande «sudo-apte».

$ sudo apt installer valgrind

Cela prendra un certain temps, mais à la fin, il est installé avec succès sur votre système.

Quelques instructions pour l'utilisation de Valgrind

Le programme ou l'application qui doit être testé est ajouté via un compilateur qui compile le programme. «-G» est utilisé car il s'agit également d'un compilateur pour les programmes C ++.

La valeur résultante de l'enregistrement de détection est affichée comme une sortie sur le terminal. En plus de cela, la valeur résultante peut être enregistrée dans un fichier.

Si vous souhaitez plus d'instructions ou avez besoin d'aide pour utiliser une commande spécifique, vous pouvez exécuter Valgrind -h, vous donnant une interface du terminal d'aide.

Nous utilisons un format spécifique pour l'indication de la détection des fuites dans la mémoire: # Valgrind -tool = memcheck -leak-check = Full ./ fichier, -leak-check = full

Principe de la détection de la mémoire de valgrind

Valgrind utilise un environnement virtuel pour la mise en œuvre des programmes. Le programme ou l'application qui doit être testé s'exécute sur cet environnement pratiquement créé. La fonction de Valgrind est de surveiller l'application, son utilisation et la version de mémoire en temps réel et d'enregistrer également les informations qui peuvent montrer des anomalies en mémoire. Dans Valgrind, il y a un composant de détection de mémoire, memcheck. Il prend en charge de nombreuses fonctions. Certains d'entre eux sont énumérés ci-dessous:

  • L'espace mémoire n'est pas alloué.
  • L'accès à l'espace mémoire a dépassé la limite donnée.
  • L'espace mémoire est libéré à plusieurs reprises.
  • L'application de l'espace mémoire et la libération de la mémoire ne sont pas adaptées.

Memcheck peut vérifier de nombreux problèmes car c'est le composant le plus puissant de Valgrind.

  • Variables qui ne sont pas initialisées
  • Un malloc () avec la fonctionnalité de «tout libre ()»
  • Pointeur de tas qui accède à la mémoire non valide.
  • Nous allons maintenant expliquer le fonctionnement de Valgrind à travers quelques exemples

Mémoire non initialisée

Ce problème se produit lorsque vous écrivez un programme avec l'utilisation d'une seule variable ou tableau. Et vous avez oublié de déclarer et d'initialiser le tableau au début. Et au moment de l'utilisation, vous n'êtes pas bien conscient de cette question de l'oubli. Cette erreur est identifiée par Valgrind. Pour expliquer l'exemple, nous avons suivi un programme en C++.

La première étape consiste à utiliser la bibliothèque STD.

# inclure

Ici, vous pouvez voir que la valeur d'une variable n'est pas attribuée et est donnée au tableau, et de même, ces valeurs sont imprimées en utilisant une boucle 'pour'. Ici, nous avons oublié d'attribuer une valeur à une variable. L'erreur se produira lorsqu'un tableau vide est choisi pour afficher les valeurs.

Nous allons maintenant exécuter ce code sur le terminal Ubuntu. Nous utiliserons un compilateur «G ++» pour compiler le code. Contrairement au code C simple, nous utiliserons ici le mot-clé de 'Valgrind.

$ gcc -Wall -Pedantic -g Fichier1.c -o fichier1
$ Valgrind ./ fichier1

Maintenant, cette commande apportera une partie de la page utilisée par la mémoire. Tout d'abord, nous aurons une description de «Memcheck». Ensuite, les détails sur la valeur non initialisée sont affichés. Dans cette partie, vous pouvez voir que le numéro de ligne est mentionné lorsqu'une erreur s'est produite. Ici, le numéro de ligne est «11».

Détection des fuites de mémoire

Supposons que vous ayez un programme qui contient malloc () pas libre (). Cela conduira à une fuite de mémoire. Il y a un exemple de code source C ++.

Dans le programme principal, un pointeur de type de caractère est utilisé avec une fonction malloc. Même un petit programme est également responsable de l'identification des fuites de la mémoire. Maintenant, nous verrons la sortie.

Le contenu de sortie correspond à la sortie de la précédente à certains aspects, nous avons donc seulement affiché la partie des fuites de mémoire pour avoir une mise au point complète.

Nous allons maintenant compiler le code ci-dessus et l'exécuterons via une commande.

$ Valgrind --tool = memcheck --leak-check = oui --track-originaux = oui ./ fichier1

Cette commande affichera les résultats suivants. Vous pouvez observer ici que des nombres d'octets perdus sont affichés. La ligne où l'erreur s'est produite est également affichée dans la dernière ligne des valeurs résultantes.

Ce résultat contient également le résumé des fuites, ce qui explique les octets totaux perdus directement ou indirectement; Quelle que soit la description, elle est expliquée brièvement dans le résultat.

Détection d'accès à la mémoire non valide

Parfois, de telles conditions sont rencontrées lorsque le code source contient un bogue, le pointeur que nous utilisons pour accéder à l'emplacement de la mémoire hors limite. Cette erreur est détectée par memcheck.

Ptr [11] = 'z';

Dans ce code susmentionné, vous pouvez voir que nous avons utilisé un «PTR» pointeur qui essaie d'accéder à un emplacement de mémoire qui dépasse la limite.

La sortie montre que la taille n'est pas valide. Comme nous avons déclaré un tableau de taille [10]. Et le pointeur accéde à la fente de 11, qui est hors de portée que nous avons déclaré.

Détection des opérations de pointeurs qui se balancent

Ce sont ces conseils qui pointent vers la mémoire qui est déjà libérée.

Ici, nous avons d'abord libre de l'espace; Même après la libération de l'espace, le code essaie d'accéder à la mémoire, qui est pointé par un pointeur.

Conclusion

`` Comment utiliser Valgrind C ++ 'est implémenté sur le terminal Linux. Il comprend le concept de base, les types de valgrind, son installation, l'instruction pour l'utilisation et certaines fonctions majeures de ses composants. Memcheck, en tant que composante majeure de Valgrind, détecte l'erreur dans le programme, que ce soit le cas de fuite de mémoire ou de mémoire non initialisée. Tous les exemples mentionnés montrent le fonctionnement de Valgrind, y compris malloc (). Cet article sera bénéfique concernant le travail et les principes de Valgrind dans l'environnement de programmation de C++.