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