2008-09-17 5 views
4

Je développe un module d'extension pour Guile, écrit en C. Ce module d'extension intègre un interpréteur Python.Comment vérifier les fuites de mémoire dans les modules d'extension Guile?

Puisque ce module d'extension appelle l'interpréteur Python, j'ai besoin de vérifier qu'il gère correctement la mémoire occupée par les objets Python.

J'ai trouvé que l'interpréteur Python se comporte bien dans sa propre gestion de la mémoire, donc en lançant valgrind je peux trouver des fuites de mémoire dues à des bugs dans mon propre code d'intégration d'interpréteur Python s'il n'y a pas d'autres facteurs interférents.

Cependant, lorsque je lance Guile sous valgrind, valgrind signale des fuites de mémoire. De telles fuites de mémoire masquent toute fuite de mémoire due à mon propre code.

La question est ce que je peux faire pour séparer les fuites de mémoire dues à des bogues dans mon code des fuites de mémoire rapportées par valgrind comme dues à Guile. Un autre outil au lieu de valgrind? Options valgrind spéciales? Abandonner et se fier à la procédure manuelle de code?

Répondre

5

Vous avez quelques options. La première consiste à écrire un fichier de suprêmes pour valgrind qui désactive le reportage de choses sur lesquelles vous ne travaillez pas. Python a un tel fichier, par exemple: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

Si valgrind n'aime pas votre configuration, une autre possibilité utilise libmudflap; vous compilez votre programme avec gcc -fmudflap -lmudflap et le code résultant est instrumenté pour le débogage de pointeur. Décrit dans les documents de gcc, et ici: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

Questions connexes