【问题标题】:How can I print test name in valgrind report?如何在 valgrind 报告中打印测试名称?
【发布时间】:2018-02-24 08:34:05
【问题描述】:
我正在使用 valgrind 检查内存泄漏。
我的应用程序有两个线程:
- 运行测试的主线程。
- 等待来自主线程的消息的工作线程和
根据收到的消息执行命令。
当 valgrind 发现内存泄漏时,如果泄漏与工作线程有关,则 valgrind 报告显示工作线程的堆栈跟踪。
为了修复这种泄漏,我需要知道是哪个测试导致了泄漏。测试名称/ID 来自主线程槽消息队列。
是否可以在 valgrind 报告中添加测试名称或 ID?
【问题讨论】:
标签:
memory-leaks
valgrind
【解决方案1】:
是否可以在 valgrind 报告中添加测试名称或 ID?
不,据我所知这是不可能的。
但是当 valgrind 发现内存泄漏时,您可以使用 gdb 附加到您的应用程序。以下是valgrind manual中的操作说明:
如果您想在使用 Memcheck 工具时使用 GDB 调试程序,
像这样启动 Valgrind:
valgrind --vgdb=yes --vgdb-error=0 prog
在另一个 shell 中,启动 GDB:
gdb prog
然后给GDB下面的命令:
(gdb) target remote | vgdb
现在您可以在堆栈跟踪中找到您从主线程接收消息并打印 gdb 测试名称、ID 或您想要的任何内容的位置。
【解决方案2】:
我们找到的解决方案是使用 valgrind 宏:VALGRIND_DO_CHANGED_LEAK_CHECK、VALGRIND_COUNT_LEAKS、VALGRIND_COUNT_LEAK_BLOCKS 以确定哪个测试导致泄漏