如何从同一进程的多次运行中合并Valgrind memcheck报告?

时间:2010-06-24 22:27:28

标签: c++ memory-leaks valgrind acceptance-testing memcheck

我每晚都有一套验收测试。我想使用valgrind自动检查代码中的内存泄漏,作为手动检查泄漏的额外安全措施。更新我的脚本以在valgrind下运行我的进程是微不足道的,但是,每个测试都会启动和停止许多进程,并且大约有15000个测试用例,所以我最终会得到数千个单独的报告。

是否有可以合并这些报告的工具?我见过valkyrie,但根据文档,他们不支持valgrind 3.5

3 个答案:

答案 0 :(得分:1)

如果您的代码大部分都是干净的,那么您可以保留错误案例。

如果你想要一个工具来组合输出,那么valgrind xml输出格式可能是正确的开始。至少然后解析不应该太难。您还可以将valgrind日志输出到其他文件,以将其与程序的输出分开。此外,当使用--error-exitcode=检测到内存泄漏时,您可以让valgrind发出错误。

在比较泄漏时,您仍然需要确定什么算作相同的内存泄漏。

答案 1 :(得分:0)

解决问题的方法应该是添加--gen-suppressions=all选项,并在suppressions files中连接所有忽略的错误。你必须手动排序真正的泄漏和漏洞,但一旦完成,valgrind将只打印真正的泄漏。

然后,如果报告写了任何内容,则可能需要在继续之前解决内存泄漏问题。

--quiet选项是必需的:以静默方式运行,并且只打印错误消息。如果您正在运行回归测试或使用其他一些自动化测试机器,则非常有用。

答案 2 :(得分:0)

较新版本的Valkyrie(Valgrind的GUI伴侣)拥有您正在寻找的东西。

$ man valkyrie
NAME
   valkyrie - graphical front-end to the Valgrind suite of tools for debugging and profiling Linux executables

SYNOPSIS
   valkyrie [valkyrie-opts] [valgrind-opts] [prog-and-args]

<snip> 
   --merge <loglist>
          Merge multiple logfiles, discarding duplicate errors

还有一个仅限CLI的变体,名为vk_logmerge。如果你在Ubuntu上,它可以在valkyrie包中找到。