如何在valgrind报告中打印测试名称?

时间:2017-09-15 08:03:46

标签: memory-leaks valgrind

我正在使用valgrind来检查内存泄漏。 我的应用程序有两个线程:

  1. 运行测试的主线程。
  2. 等待来自主线程的消息的工作线程 根据收到的消息执行命令。
  3. 当valgrind发现内存泄漏时,如果泄漏与工作线程有关,则valgrind报告显示工作线程的堆栈跟踪。 为了解决这种泄漏,我需要知道哪个测试导致泄漏。测试名称/ ID来自主线程trougth消息队列。 是否可以在valgrind报告中添加测试名称或ID?

2 个答案:

答案 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_CHECKVALGRIND_COUNT_LEAKSVALGRIND_COUNT_LEAK_BLOCKS来确定哪个测试导致泄漏