Frage

Ich entwickle ein Erweiterungsmodul für Guile, das in C geschrieben wurde. Dieses Erweiterungsmodul bettet einen Python -Dolmetscher ein.

Da dieses Erweiterungsmodul den Python -Dolmetscher aufruft, muss ich überprüfen, ob es den von Python -Objekten besetzten Speicher ordnungsgemäß verwaltet.

Ich stellte fest, dass der Python-Dolmetscher in seiner eigenen Speicherbehandlung gut erzogen ist, so dass ich durch das Ausführen von VaLgrind Speicherlecks aufgrund von Fehler in meinem eigenen Python-Interpreter-Einbettungscode finden kann, wenn es keine anderen störenden Faktoren gibt.

Wenn ich jedoch unter Valgrind Guile betreibe, berichtet Valgrind Speicherlecks. Solche Speicherlecks verdecken aufgrund meines eigenen Codes alle Speicherlecks.

Die Frage ist, was ich tun kann, um Speicherlecks aufgrund von Fehler in meinem Code von Speicherlecks zu trennen, die von Valgrind als Güter gemeldet wurden. Ein anderes Werkzeug statt Valgrind? Spezielle Valgrind -Optionen? Aufgeben und auf manuelle Code -Vorgehensweise verlassen?

War es hilfreich?

Lösung

Sie haben ein paar Optionen. Eine davon ist, eine Supressions -Datei für Valgrind zu schreiben, die die Berichterstattung über Dinge ausschaltet, an denen Sie nicht arbeiten. Python hat eine solche Datei, zum Beispiel:http://svn.python.org/projects/python/trunk/misc/valgrind-python.supp

Wenn Valgrind Ihr Setup nicht mag, wird eine andere Möglichkeit verwendet libmudflap; Sie kompilieren Ihr Programm mit gcc -fmudflap -lmudflap, und der resultierende Code ist für Zeigerdebuggen instrumentiert. Beschrieben in den GCC -Dokumenten und hier: http://gcc.gnu.org/wiki/mudflap_pointer_debugging

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top