我为Guile开发了一个扩展模块,用C语言编写。这个扩展模块嵌入了一个Python解释器。
由于此扩展模块调用Python解释器,我需要验证它是否正确管理Python对象占用的内存。
我发现Python解释器在其自己的内存处理中表现良好,因此如果没有其他干扰因素,通过运行valgrind,我可以发现由于我自己的Python解释器嵌入代码中的错误导致的内存泄漏。
然而,当我在valgrind下运行Guile时,valgrind会报告内存泄漏。由于我自己的代码,这种内存泄漏会掩盖任何内存泄漏。
问题是我可以做些什么来分离由于我的代码中的错误而导致的内存泄漏与valgrind报告的内存泄漏(因为Guile导致)。另一个工具而不是valgrind?特殊的valgrind选项?放弃并依赖手动代码演练?
答案 0 :(得分:6)
你有几个选择。一种是为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