Question

Je développe un module d'extension pour Guile, écrit en C. Ce module d'extension intègre un interpréteur Python.

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

J'ai constaté que l'interpréteur Python se comportait bien dans sa propre gestion de la mémoire. Ainsi, en exécutant valgrind, je pouvais détecter les fuites de mémoire dues à des bogues dans mon propre code d'incorporation de l'interpréteur Python, s'il n'y avait pas d'autres facteurs d'interférence.

Cependant, lorsque je lance Guile sous valgrind, celui-ci signale des fuites de mémoire. De telles fuites de mémoire masquent toutes les fuites de mémoire dues à mon propre code.

La question est de savoir ce que je peux faire pour séparer les fuites de mémoire dues à des bogues dans mon code des fuites de mémoire signalées par valgrind comme dues à Guile. Un autre outil au lieu de valgrind? Des options spéciales pour valgrind? Abandonnez-vous et comptez sur la procédure manuelle de code?

Était-ce utile?

La solution

Vous avez plusieurs options. La première consiste à écrire un fichier de suppressions pour valgrind qui désactive la création de rapports sur des éléments sur lesquels 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é consiste à utiliser libmudflap ; vous compilez votre programme avec gcc -fmudflap -lmudflap et le code résultant est instrumenté pour le débogage du pointeur. Décrit dans la documentation gcc et ici: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging" rel="noreferrer"> http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging" rel="noreferrer"> http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging" rel="noreferrer"> http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging" rel="noreferrer"> http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging" rel="noreferrer"> >

scroll top