即使程序中止,如何强制gcov提取数据

时间:2011-07-14 20:47:06

标签: c gcov klee

我正在使用一个名为KLEE的测试生成工具,它为我的C99-Code创建了大量测试。 然后我运行测试并用gcov检查线路覆盖。 Gcov似乎在成功完成后更新了运行结束时的覆盖率数据。

但是,某些测试失败(断言声明不正确),导致程序中止,而gcov不计算此次运行中涵盖的行。

有没有办法让gcov在任何退出时刷新信息(不仅仅是成功)?

1 个答案:

答案 0 :(得分:7)

在断言代码中,在断言和应用之前调用void __gcov_flush(void)(来自编译器-fprofile-arcs选项链接的libgcov.a)(例如将abort();更改为{{1} }})。这个将调用gcov_exit函数(它在libgcov中静态定义)。 gcov_exit是将收集的coverage保存到文件中的主要功能。它由__gcov_init注册__gcov_flush();abort();;并且你的断言在杀死一个应用程序时会忽略atfork。

解决此问题的另一种方法是找出断言忽略atfork()注册函数的原因。