2010-06-24 34 views
3

我有一套每晚都要进行的验收测试。我想使用valgrind自动检查代码中的内存泄漏,作为手动检查泄漏的附加安全防护措施。更新我的脚本以在valgrind下运行我的进程是微不足道的,但是,每个测试都会启动并停止大量进程,并且大约有15000个测试用例,因此最终会生成数千个单独的报告。如何合并同一进程的多次运行的Valgrind memcheck报告?

有没有能够合并这些报告的工具?我见过武神,但根据文档,他们不支持valgrind 3.5

+0

同样的问题。现在的结论:写一个脚本:)我感兴趣,如果你发现这样一个工具... – neuro 2010-06-25 08:37:59

回答

1

如果你的代码大部分是干净的,那么你可以保留错误情况。

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

比较泄漏时,您仍然需要决定什么是相同的内存泄漏。

+0

鉴于可能有成千上万的报告产生只是发现错误的情况下可能很难。会有很多错误情况,以及我知道那里有很少的泄漏。还会有很多重复的东西,我希望任何合并工具都可以合并为一份主报告。 – Glen 2010-06-25 16:17:11

+0

因此,我的“如果你的代码大多是干净的”声明。在任何情况下合并都会非常棘手,因为在比较时必须确定追踪的重要程度。 – 2010-06-25 16:32:08

0

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

然后,如果报告写了任何东西,也许你必须在继续之前解决内存泄漏。

--quiet选项是必需的:默默运行,只打印错误信息。如果你正在运行回归测试或者有其他一些自动化测试机器,这很有用

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包中找到。