2008-09-17 63 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