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

我为项目中的几个文件设置了gcov的C/C++代码覆盖率.

可执行文件正在并行运行.这导致一些共享的代码段并行运行.

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

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

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

正在使用的Gcov版本是1.5

最佳答案 好吧,似乎你已经找到问题的根本原因并寻找解决方法.

我已经使用gcov成功配置了几个代码覆盖项目.

我想为你清楚一些事情:

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

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

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

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

点赞