我正在使用一个名为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()函数的原因.