我正在使用一个名为KLEE的测试生成工具,它为我的c99代码创建了许多测试。之后,我运行测试并使用gcov检查线路覆盖率。Gcov似乎在运行结束后成功完成时更新覆盖率数据。
然而,一些测试失败(断言语句不为真),这将导致中止程序,并且gcov不计算这次运行所涵盖的行数。
gcov是否有办法在任何退出(不仅仅是成功退出)时刷新信息?
调用void __gcov_flush(void)
(from libgcov。(由编译器的-fprofile-arcs
选项链接)在断言代码中,就在杀死和应用程序之前(例如将abort();
更改为__gcov_flush();abort();
)。这个函数将调用gcov_exit函数(它在libgcov中静态定义)。Gcov_exit是将收集的覆盖率保存到文件中的主要函数。它是由__gcov_init注册的atfork()
;并且assert在终止应用程序时忽略atfork。
atfork()
注册的函数。