2008-09-17 62 views
4

我爲Guile開發了一個擴展模塊,用C編寫。這個擴展模塊嵌入了一個Python解釋器。如何檢查Guile擴展模塊中的內存泄漏?

由於此擴展模塊調用Python解釋器,我需要驗證它是否正確管理了Python對象佔用的內存。

我發現Python解釋器乖巧的在自己的內存處理,使運行的valgrind我能找到的內存泄漏是由於我自己的Python解釋器嵌入代碼中的錯誤,如果沒有其他的干擾因素。

但是,當我在valgrind下運行Guile時,valgrind會報告內存泄漏。這種內存泄漏掩蓋了由於我自己的代碼而導致的任何內存泄漏。

問題是我能做些什麼來分離內存泄漏,這是由於我的代碼中的錯誤是由於valgrind報告的內存泄漏而導致的。另一種工具,而不是valgrind?特殊的valgrind選項?放棄並依靠手動代碼演練?

回答

5

你有幾個選項。一種是爲valgrind編寫一個supressions文件,關閉那些你不工作的東西的報告。 Python有這樣一個文件,例如: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

如果valgrind不喜歡你的設置,另一種可能是使用libmudflap;您使用gcc -fmudflap -lmudflap編譯程序,並且生成的代碼用於指針調試。在gcc文檔中描述,並在這裏:http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging