2008-09-17 6 views
4

Ich entwickle ein Erweiterungsmodul für Guile, in C geschrieben. Dieses Erweiterungsmodul bettet einen Python-Interpreter ein.Wie nach Speicherlecks in Guile-Erweiterungsmodulen zu überprüfen?

Da dieses Erweiterungsmodul den Python-Interpreter aufruft, muss ich sicherstellen, dass es den von Python-Objekten belegten Speicher ordnungsgemäß verwaltet.

Ich fand, dass der Python-Interpreter sich in seiner eigenen Speicherbehandlung gut benimmt, so dass ich mit valgrind Speicherlecks aufgrund von Fehlern in meinem eigenen Python-Interpreter-Einbettungscode finden kann, wenn es keine anderen störenden Faktoren gibt.

Wenn ich jedoch Guile unter Valgrind ausführen, meldet Valgrind Speicherlecks. Solche Speicherlecks verschleiern Speicherlecks aufgrund meines eigenen Codes.

Die Frage ist, was kann ich tun, um Speicherverluste aufgrund von Fehlern in meinem Code von Speicherverlusten zu trennen, die von Valgrind als aufgrund von Guile gemeldet werden. Ein anderes Werkzeug statt Valgrind? Spezielle Valgrind-Optionen? Aufgeben und sich auf manuellen Code-Walkthrough verlassen?

Antwort

5

Sie haben ein paar Optionen. Eine besteht darin, eine Unterdrückungsdatei für valgrind zu schreiben, die das Melden von Dingen ausschaltet, an denen Sie gerade nicht arbeiten. Python hat eine solche Datei, zum Beispiel: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

Wenn Valgrind Ihre Einrichtung nicht gefällt, ist eine andere Möglichkeit libmudflap; Sie kompilieren Ihr Programm mit gcc -fmudflap -lmudflap, und der resultierende Code wird für Zeiger-Debugging instrumentiert. Beschrieben in der gcc-Dokumentation und hier: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging