我有在C++类上实现的Python扩展。我没有可用于运行valgrind的C++目标文件。我希望使用valgrind进行内存检查。
我能否在Python中使用valgrind?
是的,你可以使用valgrind
来检查Python程序。你只需要使用Python开发人员提供的valgrind suppression文件,这样就不会因为Python的自定义内存分配/重新分配函数而出现大量的误报。
可以在这里找到valgrind suppression文件: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
另外,您还可以重新编译禁用PyMalloc的Python,这样可以捕获更多的内存泄漏,如果只是抑制PyMalloc,则无法发现这些泄漏。
请参阅 Python SVN 存储库中的此自述文件,其中描述了使用 valgrind 的不同方式:http://svn.python.org/projects/python/trunk/Misc/README.valgrind
--with-valgrind
的编译时标志,使Python解释器可以检测到它在valgrind下运行并禁用PyMalloc。这应该允许您比其他方式更准确地监视内存分配情况,因为PyMalloc只是在大块内存中分配内存。是的,你可以:你确实有一个目标来运行valgrind -- 它就是Python解释器本身:
valgrind python foo.py
Misc/valgrind-python.supp
中抑制PyObject_Free
和PyObject_Realloc
警告的行吗? - Steven T. Snyder