我正在使用valgrind来检查内存泄漏。 我的应用程序有两个线程:
当valgrind发现内存泄漏时,如果泄漏与工作线程有关,则valgrind报告显示工作线程的堆栈跟踪。 为了解决这种泄漏,我需要知道哪个测试导致泄漏。测试名称/ ID来自主线程trougth消息队列。 是否可以在valgrind报告中添加测试名称或ID?
答案 0 :(得分:0)
是否可以在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或任何您想要的内容进行打印。
答案 1 :(得分:0)
我们找到的解决方案是使用valgrind宏:VALGRIND_DO_CHANGED_LEAK_CHECK
,VALGRIND_COUNT_LEAKS
,VALGRIND_COUNT_LEAK_BLOCKS
来确定哪个测试导致泄漏