加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在并行运行时使用gcov进行代码覆盖

发布时间:2020-12-16 07:34:55 所属栏目:百科 来源:网络整理
导读:我为项目中的几个文件设置了gcov的C/C++代码覆盖率. 可执行文件正在并行运行.这导致一些共享的代码段并行运行. 我收到了损坏的.da文件或零大小的.da文件.这是并行运行的问题吗? 因为两个或多个可执行实例试图在同一个.da文件上写入,以便为执行中的每个语句
我为项目中的几个文件设置了gcov的C/C++代码覆盖率.
可执行文件正在并行运行.这导致一些共享的代码段并行运行.

我收到了损坏的.da文件或零大小的.da文件.这是并行运行的问题吗?

因为两个或多个可执行实例试图在同一个.da文件上写入,以便为执行中的每个语句写入覆盖计数?

如果是这样,有没有解决方法?

正在使用的Gcov版本是1.5

解决方法

好吧,似乎你已经找到问题的根本原因并寻找解决方法.
我已经使用gcov成功配置了几个代码覆盖项目.
我想为你清楚一些事情:

>我们在编译期间为每个使用–coverage选项检测的源文件获取.gcno文件.
>在执行时,我们为每个gcno文件获取.gcda文件.

.gcno文件只是相关源代码文件的流程图结构.
.gcda文件是执行时生成的实际覆盖数据.

因此,在您的情况下.gcda(在早期版本中曾经是.da)在两个或多个执行尝试同时写入相同的.gcda文件时会发生冲突.

最简单的解决方法是连续运行测试. (至少那是我的所作所为)您不必担心丢失覆盖率数据,因为.gcda会附加每次执行而不会被覆盖.请记住,您不必进行重新编译,因为它会更改.gcno文件,之前的.gcda文件将变得无用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读