关于python:如何检查Guile扩展模块中的内存泄漏?

关于python:如何检查Guile扩展模块中的内存泄漏?

How to check for memory leaks in Guile extension modules?

我开发了用C编写的Guile扩展模块。该扩展模块嵌入了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


推荐阅读