我在C++类上实现了Python扩展。我没有C++目标来运行valgrind。我想使用valgrind进行内存检查。如何在Python C++扩展中使用valgrind?
我可以在Python中使用valgrind吗?
我在C++类上实现了Python扩展。我没有C++目标来运行valgrind。我想使用valgrind进行内存检查。如何在Python C++扩展中使用valgrind?
我可以在Python中使用valgrind吗?
是的,你可以:你做有一个目标与运行Valgrind的 - 这是Python解释器本身:
valgrind python foo.py
然而,上述结果可能不会很理想 - Python是建在选择模式和特殊的malloc,这可能会淹没你的误报。
通过首先构建Python的调试版本,您可能会获得更好的结果。开始here。
是的,你可以在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回购其描述使用Python用Valgrind的方式的不同,此README文件: http://svn.python.org/projects/python/trunk/Misc/README.valgrind
* - 或者,你可以用禁用PyMalloc来重新编译Python,这样可以捕获更多的内存泄漏,如果你只是禁止PyMalloc,就会显示出来。
Python 2.7看起来很淘气。一个空脚本(valgrind --leak-check = yes --suppressions = valgrind-python.supp python -tt -E“”) 在Fedora 16上给出了“来自315个上下文的315个错误(压制:2个)”。 – Ling 2012-03-12 21:44:37
@Ling您是否记得取消注释'Misc/valgrind-python.supp'中的行,以阻止“PyObject_Free”和“PyObject_Realloc”的警告? – 2012-03-12 21:46:49
我做到了。这就是我感到惊讶的原因。 – Ling 2012-03-13 01:45:04
在Python 2.7和3.2中,现在有一个--with-valgrind
编译时标志,允许Python解释器检测它何时在valgrind下运行并禁用PyMalloc。这应该允许你更准确地监视你的内存分配情况,因为PyMalloc只是以大块分配内存。
这是当你运行python或当你编译python?我正在运行2.7.1,不能只是'valgrind python --with-valgrind myscript.py' – oob 2011-11-27 19:16:56
对不起,我应该已经更清楚了。这是一个编译时标志,它将配置Python来检测它在valgrind下运行的时间。一些细节在这里:http://bugs.python.org/issue2422 – 2011-11-27 20:19:36
您能否更新该链接? – 2014-02-06 16:24:03