是否可以在代码的一部分上运行 valgrind

Is it possible to run valgrind on a portion of the code?

本文关键字:一部分 运行 valgrind 代码 是否      更新时间:2023-10-16

我有一个内存泄漏,发生在相当大的系统的已知部分中。我想全速运行直到该段代码,在该部分上运行 valgrind memcheck,并在该部分结束时收集 valgrind memcheck 报告,而无需进一步完成运行。这可能吗?

不使用 memcheck,不。根据 valgrind FAQ,callgrind 是目前唯一支持这一点的 valgrind 组件:

5.4. 是否可以将Valgrind附加到已经在运行的程序?

不。Valgrind 为运行程序提供的环境与普通程序的环境明显不同,例如由于内存布局不同。因此,瓦尔格林德必须从一开始就拥有完全的控制权。

可以通过

在没有任何检测的情况下运行程序来实现这样的事情(这涉及大约 5 倍的减速,比大多数工具的减速慢),然后在到达兴趣点后添加检测。但是,该工具必须对此提供支持,而Callgrind是目前唯一具有此类支持的工具。有关详细信息,请参阅callgrind_control程序的说明。