前端之家收集整理的这篇文章主要介绍了
即使程序中止,如何强制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() – 注册函数的原因.
原文链接:https://www.f2er.com/c/119614.html