neu*_*ron 32 c++ python valgrind
我在C++类上实现了Python扩展.我没有运行valgrind的C++目标.我想用valgrind进行内存检查.
我可以在Python中使用valgrind吗?
Ste*_*der 43
是的,你可以使用valgrind
Python.您只需要使用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
Run Code Online (Sandbox Code Playgroud)
另请参阅Python SVN repo中的这个README文件,该文件描述了使用Python和valgrind的不同方法:http: //svn.python.org/projects/python/trunk/Misc/README.valgrind
* - 或者,您可以在禁用PyMalloc的情况下重新编译Python,这样可以捕获更多内存泄漏,如果您只是抑制PyMalloc则不会显示这些泄漏.
在Python 2.7和3.2中,现在有一个--with-valgrind
编译时标志,允许Python解释器检测它何时在valgrind下运行并禁用PyMalloc.这应该允许你更准确地监视你的内存分配,因为PyMalloc只是在大块中分配内存.
是的,你可以:你确实有一个运行 valgrind 的目标——它是 python 解释器本身:
valgrind python foo.py
Run Code Online (Sandbox Code Playgroud)
然而,上面的结果可能不是很令人满意——Python 是在 opt 模式下构建的,并且具有特殊的 malloc,这可能会让您陷入误报中。
首先构建 Python 的调试版本可能会获得更好的结果。从这里开始。
归档时间: |
|
查看次数: |
10786 次 |
最近记录: |