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

发布于 2024-11-24 07:39:07 字数 204 浏览 1 评论 0原文

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

但是,某些测试会失败(断言语句不正确),这会导致程序中止,并且 gcov 不会计算本次运行中涵盖的行数。

gcov 有什么方法可以在任何退出时刷新信息(不仅仅是成功时)?

I'm using a test-generating tool called KLEE, that creates lots of tests for my C99-Code.
Afterwards I run the tests and check line coverage with gcov.
Gcov seems to update coverage data at the end of the run upon successful completion.

However, some tests fail (assert statements that are not true), which leads to aborting the program and gcov not counting the lines covered in this run.

Is there any way that gcov flushes information on any exit (not only on successful)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

缘字诀 2024-12-01 07:39:07

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

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

Call void __gcov_flush(void) (from libgcov.a which is linked in by -fprofile-arcs option of compiler) in your assert code, just before killing and application (e.g. change abort(); into __gcov_flush();abort();). This one will call an gcov_exit function (it is statically defined in libgcov). gcov_exit is the main functions to save collected coverage into file. It is registered by __gcov_init with atfork(); and your assert ignores atfork when kills an application.

Another way of solving this is to find why your assert ignores atfork()-registered functions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文