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



我正在使用一个名为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。

解决这个问题的另一种方法是找出为什么assert忽略atfork()注册的函数。

相关内容

  • 没有找到相关文章

最新更新