2009-11-29 6 views
1

Je ne pense pas qu'il existe un moyen d'activer/désactiver par programmation Valchind memcheck de la façon dont vous pouvez avec callgrind? (Démarrer/arrêter l'instrumentation). Il est douloureusement, inutilement lent (ce qui est correct si le code que vous voulez tester démarre automatiquement et que vous le laissez en marche), mais je ne peux pas entrer dans le code qui est important sans cliquer sur quelques boutons dans l'application , qui est rendu complètement insensible. (Mon code est un plug-in à une autre application)Valgrind memcheck programatic enable

Merci

Répondre

3

Il est à peu près impossible en principe. Si valgrind ne connaît pas l'historique complet de toute votre mémoire, comment peut-il savoir avec certitude que quelque chose est une fuite, ou même une référence à une mémoire invalide?

2

Vous ne pouvez pas arrêter/démarrer l'instrumentation, mais vous pouvez effectuer par programme des contrôles de fuite incrémentiels. Voir http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs et plus précisément VALGRIND_DO_LEAK_CHECK, VALGRIND_DO_ADDED_LEAK_CHECK et VALGRIND_DO_CHANGED_LEAK_CHECK.

+0

Les requêtes client VALGRIND_DISABLE_ERROR_REPORTING' et VALGRIND_ENABLE_ERROR_REPORTING', qui sont pratiques pour filtrer les choses que vous connaissez, ne sont pas intéressantes en masse. Si vous êtes intéressé par une fuite lente dans une application longue durée, vous pouvez démarrer, désactiver la création de rapports, effectuer une vérification initiale des fuites, réactiver la création de rapports et procéder à des vérifications de fuite incrémentielles pour voir ce qui est rapporté. Particulièrement utile si vous faites des vérifications «joignables». –