如何将valgrind与Python C ++扩展一起使用?

时间:2010-10-20 20:32:44

标签: c++ python valgrind

我在C ++类上实现了Python扩展。我没有运行valgrind的C ++目标。我想用valgrind进行内存检查。

我可以在Python中使用valgrind吗?

3 个答案:

答案 0 :(得分:42)

是的,您可以在Python中使用valgrind。您只需要使用Python开发人员提供的valgrind抑制文件,因此您不会因Python的自定义内存分配/重新分配功能而产生大量误报。

可以在此处找到valgrind抑制文件:http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

重要事项:您需要在抑制文件*中取消注释PyObject_Free和PyObject_Realloc的行。

推荐的用法语法为:

$ valgrind --tool=memcheck --suppressions=valgrind-python.supp \
                                          python -E -tt ./my_python_script.py

另请参阅Python SVN repo中的这个README文件,该文件描述了使用Python和valgrind的不同方法:  http://svn.python.org/projects/python/trunk/Misc/README.valgrind

* - 或者,您可以在禁用PyMalloc的情况下重新编译Python,这样可以捕获更多内存泄漏,如果您只是抑制PyMalloc则不会显示这些泄漏。

答案 1 :(得分:8)

在Python 2.7和3.2中,现在有一个--with-valgrind编译时标志,允许Python解释器检测它何时在valgrind下运行并禁用PyMalloc。这应该可以让你更准确地监视你的内存分配,因为PyMalloc只是以大块的形式分配内存。

答案 2 :(得分:0)

是的,你可以:你有一个目标来运行valgrind - 它是python解释器本身:

valgrind python foo.py

然而,上面的结果可能不是很令人满意 - Python是以opt模式构建的,并且带有一个特殊的malloc,它可能会让你误入歧途。

首先构建Python的调试版本,您可能会获得更好的结果。开始here

相关问题