12
votes

Puis-je faire des bibliothèques Valgrind Ignorer Glibc?

Est-il possible de dire à Valgrind d'ignorer un ensemble de bibliothèques? Spécifiquement les bibliothèques glibc ..

Problème réel: J'ai du code qui fonctionne bien en exécution normale. Pas de fuite, etc.

Lorsque j'essaie de l'exécuter via Valgrind, je reçois des décharges de base et des redémarrages de programme / arrêts.

Le noyau pointe généralement des fonctions GLIBC (généralement Fsek, Mutex, etc.). Je comprends qu'il pourrait y avoir un problème avec une version incompatible Glibc / Valgrind.

J'ai essayé diverses versions de Valgrind et Glibc, mais pas de chance. Aucune suggestion?


0 commentaires

4 Réponses :


3
votes

Oui, consultez Valgrind's Système de suppression .


3 commentaires

Je pense qu'il veut dire que Valgrind ne pas profiler certaines fonctions GLIBC, pas seulement supprimer la sortie résultante.


@Tim: Exactement! Fondamentalement, je veux que Valgrind les ignore (les exécuter comme une exécution normale)


@Jack - Vous devrez vous familiariser avec Valgrind Internals pour cela. Je suggère vraiment de jeter un coup d'oeil à Valgrind / Valgrind.h, c'est difficile de suggérer quelque chose à moins que vous n'ayez publié la sortie que vous avez reçue de Valgrind.



1
votes

Vous voulez probablement demander cela sur le Liste de diffusion de Valgrind's User (ce qui est extrêmement utile). Vous pouvez supprimer la sortie de certains appels, toutefois, supprimer le bruit est tout ce que vous faites. Les appels suivent toujours la valgronnée.

Pour accomplir ce dont vous avez besoin, vous correspondez à la valorisation de la valorisation de manière appropriée avec GLIBC ou Utilisez les macros dans Valgrind / Valgrind.h pour les contourner. En utilisant ceux-ci, oui, vous pouvez dire à Valgrind de ne pas toucher certaines choses. Je ne sais pas quels appels sont tout burking, cependant, vous pouvez également (sélectivement) non exécuter des bits de code dans votre propre programme si son exécutoire sous Valgrind. Voir le exécutant_on_valgrind macro dans VALRIND / VALGRIND.H .

L'autre chose qui me vient à l'esprit consiste à s'assurer que Valgrind a été compilé correctement pour Traiter avec des threads . Gardez à l'esprit que les opérations atomiques sous Valgrind pourraient causer un blocage de votre programme pendant les opérations pidayes, autrement pourraient ne pas, sinon correctement configurés.

Si vous échangez des versions de Valgrind et de Glibc, vous trouverez une chance de trouver une correspondance, mais de la valorisation de la valorisation incorrectement configurée à la hauteur de la construction.


0 commentaires

4
votes

Comme indiqué par le détour, Valgrind a un mécanisme élaboré de contrôle quelles procédures sont instrumentées et comment. Mais à la fois Valgrind et Glibc sont des bêtes compliquées, et vous vraiment, vraiment, vous ne voulez vraiment pas faire cela. Le moyen facile d'obtenir un glibc et une valcrind qui sont compatibles mutuellement sont de obtenir les deux de la distribution Linux de votre choix . Les choses devraient "travailler simplement", et s'ils ne le font pas, vous avez quelqu'un à se plaindre.


0 commentaires

11
votes

Cela ne répond probablement pas à votre question, mais vous fournira les détails de la manière de supprimer certaines erreurs (que d'autres personnes ont fait allusion mais n'ont pas décrit en détail):

premier, exécuté Valgrind Code> comme suit: p> xxx pré>

maintenant le fichier de sortie valgrind.out code> contiendra des blocs de suppression générés automatiquement comme suit: P>

valgrind --log-file=valgrind --suppressions=sendmsg.supp ./a.out


1 commentaires

Stackoverflow.com/a/14779512/52074 . Le lien entrevoit comment créer vos propres règles de suppression générique.