让Valgrind检测从Python脚本调用的C++程序内存泄漏:
如果一个C++程序是通过Python脚本来调用的,想要让Valgrind检查C++程序中的内存泄漏,而不仅仅是检查脚本本身,该怎么做呢?举个例子,如果leak.cc
里有以下代码
int main() {
int* p = new int;
}
并且它被编译成了a.out
,而call_aout.py
里包含了
#!/usr/bin/env python
import subprocess
subprocess.call(["./a.out"])
那么通过以下方式运行Valgrind
valgrind --track-origins=yes --leak-check=full -v ./call_aout.py
是无法检测到leak.cc
中的内存泄漏的,但如果通过下面的方式调用它
valgrind --track-origins=yes --leak-check=full -v ./a.out
就能检测到内存泄漏了。
1 个回答
3
你想在你的valgrind命令行中使用:
--trace-children=yes
另外,如果你不在乎这个python脚本,你也可以直接在脚本里用valgrind
来启动你的子进程:
subprocess.call("valgrind --track-origins=yes --leak-check=full -v ./a.out")