【问题标题】:Make valgrind to collect the data on request使 valgrind 根据要求收集数据
【发布时间】:2021-11-03 11:20:47
【问题描述】:

我有一个内存泄漏,我正在尝试使用 massif 进行跟踪。 问题是泄漏总是在应用程序启动后的几个小时内发生。 现在,在地块上运行的应用程序比正常速度慢 20 倍左右,因此要发生泄漏,我必须等待 100 小时或更长时间。 这次我什至试图等待,但碰巧没有泄漏。我怀疑只有当我的项目全速运行时才会以某种方式发生泄漏? 由于无法将 valgrind 附加到正在运行的进程,是否有可能推迟 valgrind 以便它会在一段时间后收集数据,或者根据请求甚至更好?这样我可以在程序运行良好(希望速度正常)时等待一段时间,然后在发生泄漏时开始记录。

感谢任何帮助。

【问题讨论】:

    标签: c++ memory-leaks valgrind massif


    【解决方案1】:

    对于内存泄漏,memcheck 是 Valgrind 的最佳工具。可以使用 memcheck 触发泄漏检查。您可以修改您的可执行文件以添加 Valgrind 客户端请求,或者在 gdb/vgdb 下运行并使用 monitor 命令。

    我知道 Massif 的唯一一件事是 recent patch 允许客户端请求。您必须下载 Valgrind 源代码,应用此补丁并构建 Valgrind。我没有这方面的经验。

    您也可以考虑heapcheck,如果可以修改您的构建,请使用 Leak sanitizer。

    【讨论】:

    • memcheck 我正在尝试,但这个工具似乎比地块更需要资源。第二件事是,当应用程序关闭时,我遇到的泄漏似乎正在被释放。第三个 memcheck 输出文件超过 30MB。我试图分析这一点,我就放弃了。在我的特殊情况下,地块似乎足以找到问题。我会检查其他建议。谢谢。
    • 不要放弃。通常一个巨大的错误日志并不意味着大量不同的错误。通常有相对少量的错误会发生很多次。从第一个错误开始并不断修复它们。
    • 这是另一个问题,因为我只负责整个应用程序的一小部分(我正在开发单个 .so lib),我无法修复其他大量错误。然而,正如我在回答中评论的那样,我发现 libleak 可以完成这项工作。
    【解决方案2】:

    对于那些和我也遇到类似问题的人。 我找到了其他解决方案。我没有使用 valgring,而是使用了 libleak 工具,它与地块的工作几乎相同,但它消耗的资源更少。 详情请参阅: https://github.com/WuBingzheng/libleak

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多