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

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

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

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

解决方法

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...