【问题标题】:How can I print test name in valgrind report?如何在 valgrind 报告中打印测试名称?
【发布时间】:2018-02-24 08:34:05
【问题描述】:

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

  1. 运行测试的主线程。
  2. 等待来自主线程的消息的工作线程和 根据收到的消息执行命令。

当 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_CHECKVALGRIND_COUNT_LEAKSVALGRIND_COUNT_LEAK_BLOCKS 以确定哪个测试导致泄漏

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-09
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        相关资源
        最近更新 更多