【发布时间】:2009-11-29 19:35:25
【问题描述】:
我不认为有一种方法可以像使用 callgrind 那样以编程方式启用/禁用 Valgrind memcheck? (启动/停止仪器)。
这很痛苦,慢得无法使用(如果您要测试的代码自动启动并且您只是让它运行,这没关系),但如果不点击应用程序中的几个按钮,我实际上无法进入重要的代码,这完全没有响应。 (我的代码是另一个应用程序的插件)
谢谢
【问题讨论】:
我不认为有一种方法可以像使用 callgrind 那样以编程方式启用/禁用 Valgrind memcheck? (启动/停止仪器)。
这很痛苦,慢得无法使用(如果您要测试的代码自动启动并且您只是让它运行,这没关系),但如果不点击应用程序中的几个按钮,我实际上无法进入重要的代码,这完全没有响应。 (我的代码是另一个应用程序的插件)
谢谢
【问题讨论】:
原则上这几乎是不可能的。如果 valgrind 不知道你所有内存的完整历史,它怎么能确定某事是泄漏,甚至是对无效内存的引用?
【讨论】:
您无法停止/启动检测,但可以以编程方式进行增量泄漏检查。请参阅http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs,特别是 VALGRIND_DO_LEAK_CHECK、VALGRIND_DO_ADDED_LEAK_CHECK 和 VALGRIND_DO_CHANGED_LEAK_CHECK。
【讨论】:
VALGRIND_DISABLE_ERROR_REPORTING 和VALGRIND_ENABLE_ERROR_REPORTING 客户端请求,它们可以方便地过滤您知道不感兴趣的东西。如果您对长时间运行的应用程序中的缓慢泄漏感兴趣,您可以启动、禁用报告、进行初始泄漏检查、重新启用报告并进行增量泄漏检查以查看报告的内容。如果您正在做reachable 检查,则特别有用。