让Valgrind检测从Python脚本调用的C++程序内存泄漏:

1 投票
1 回答
1669 浏览
提问于 2025-04-18 07:38

如果一个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")

撰写回答