如何通过lcov和代码覆盖率比较处理不同目录中的.gcda和.gcno文件


我可以通过 lcov 生成 .info 文件,其中包含同一目录中的 .gcda 文件和 .gcno 文件

,但是我如何在不同的位置使用 .gcda 文件和 .gcno 文件生成代码覆盖率?

例如

/Users/swd/Library/Developer/Xcode/DerivedData/test1aaeyiowcssrymfbwtudrqqakuvr/Build/Intermediates/test1.build/Cov/test1.build/Objects-normal/x86_64/AppDelegate.gcno

/Volumes/Data/test1/

test1/AppDelegate.gcda

我尝试了 --

add-tracefile,但失败了,并输出"lcov:错误:在跟踪文件中找不到有效记录"

我的第二个问题是 lcov 是否有一些命令来比较我的旧版本覆盖 html 和我的新版本,以便我可以找到差异。

有什么想法吗?谢谢

嗯,很少

有事情需要先清除,以避免其他人混淆。

.gcno.gcda永远不会在不同的位置为单个对象文件生成。(至少这是我从我的经验中知道的)
使用自动构建器或手动命令编译源文件时,它会在同一位置生成.gcno文件和.o文件。之后,当您执行任何类型的执行时,目标文件会触发覆盖生成功能,并在与".gcno"和对象文件相同的位置生成.gcda文件。
如果它们是为不同的.gcno文件生成的,那么它们无论如何都不能一起使用。

如果设置了环境变量GCOV_PREFIX,则可能会发生这种情况。看这里建议的解决方案是通过执行以下操作将.gcno文件发布到$GCOV_PREFIX

rsync -acv --filter='+ */' --filter='+ *.gcno' --filter='- *' <directory-containing-object-files> $GCOV_PREFIX

最新更新