如何将valgrind与Python C++;扩展? 我在C++类上实现了Python扩展。我没有一个C++目标来运行ValgRink。我想使用valgrind进行内存检查

如何将valgrind与Python C++;扩展? 我在C++类上实现了Python扩展。我没有一个C++目标来运行ValgRink。我想使用valgrind进行内存检查,c++,python,valgrind,C++,Python,Valgrind,我可以将valgrind与Python一起使用吗?是的,您可以:您确实有一个运行valgrind的目标—它是Python解释器本身: valgrind python foo.py 然而,上面的结果可能不是很令人满意——Python是在opt模式下构建的,带有一个特殊的malloc,这可能会让您陷入误报 首先构建Python的调试版本可能会获得更好的结果。开始。是的,您可以在Python中使用valgrind。您只需要使用Python开发人员提供的valgrind抑制文件,这样就不会因为Pyth

我可以将valgrind与Python一起使用吗?

是的,您可以:您确实有一个运行valgrind的目标—它是Python解释器本身:

valgrind python foo.py
然而,上面的结果可能不是很令人满意——Python是在opt模式下构建的,带有一个特殊的malloc,这可能会让您陷入误报


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

是的,您可以在Python中使用
valgrind
。您只需要使用Python开发人员提供的valgrind抑制文件,这样就不会因为Python的自定义内存分配/重新分配函数而出现大量误报

valgrind抑制文件可在以下位置找到:

重要提示:您需要取消对抑制文件*中PyObject\u Free和PyObject\u Realloc行的注释

建议的用法语法为:

$ valgrind --tool=memcheck --suppressions=valgrind-python.supp \
                                          python -E -tt ./my_python_script.py
另请参见Python SVN repo中的自述文件,该文件描述了将Python与valgrind一起使用的不同方法:


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

在Python 2.7和3.2中,现在有一个
--with valgrind
编译时标志,允许Python解释器在valgrind下运行时检测并禁用PyMalloc。这将使您能够更准确地监控内存分配,因为PyMalloc只是在大块中分配内存。

这是在运行python时还是在编译python时?我正在运行2.7.1,不能只使用valgrind python——使用valgrind myscript.py’对不起,我应该更清楚一些。这是一个编译时标志,它将配置Python以检测它何时在valgrind下运行。这里有一些细节:Python2.7看起来很顽皮。一个空脚本(valgrind--leak check=yes--suppressions=valgrind-python.supp python-tt-E“”)给出“315个上下文中的315个错误(被抑制的:从2到2)”在Fedora 16上。@Ling您是否记得取消注释
Misc/valgrind python.supp
中的行,这些行禁止对
PyObject\u Free
PyObject\u Realloc
发出警告?我取消了注释。这就是为什么我感到惊讶。在我刚刚打开python解释器的快速测试中,我使用抑制文件(PyObject_Free和PyObject_Realloc uncommented),从:==9872==错误摘要:75个上下文中的793个错误(抑制:15个从10个)到==9920==错误摘要:23个上下文中的31个错误(抑制:777个从62个)。我确实尝试了python配置标志,但它们似乎没有消除剩余的错误。