我为项目中的几个文件设置了gcov的C/C++代码覆盖率.
可执行文件正在并行运行.这导致一些共享的代码段并行运行.
我收到了损坏的.da文件或零大小的.da文件.这是并行运行的问题吗?
因为两个或多个可执行实例试图在同一个.da文件上写入,以便为执行中的每个语句写入覆盖计数?
如果是这样,有没有解决方法?
正在使用的Gcov版本是1.5
最佳答案 好吧,似乎你已经找到问题的根本原因并寻找解决方法.
我已经使用gcov成功配置了几个代码覆盖项目.
我想为你清楚一些事情:
>我们在编译期间为每个使用–coverage选项检测的源文件获取.gcno文件.
>在执行时,我们为每个gcno文件获取.gcda文件.
.gcno文件只是相关源代码文件的流程图结构.
.gcda文件是执行时生成的实际覆盖数据.
因此,在您的情况下.gcda(在早期版本中曾经是.da)在两个或多个执行尝试同时写入相同的.gcda文件时会发生冲突.
最简单的解决方法是连续运行测试. (至少那是我的所作所为)
您不必担心丢失覆盖率数据,因为.gcda会附加每次执行而不会被覆盖.请记住,您不必进行重新编译,因为它会更改.gcno文件,之前的.gcda文件将变得无用.