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

时间:2015-01-14 09:51:43

标签: ios code-coverage gcov lcov

我可以通过lcov生成带有.gcda文件的.info文件和同一目录下的.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:ERROR:在跟踪文件中找不到有效记录'

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

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:1)

首先需要清除的东西很少,以免其他人混淆。

对于单个对象文件,永远不会在不同位置生成

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

答案 1 :(得分:1)

如果设置了环境变量GCOV_PREFIX,则会发生这种情况。见here 建议的解决方案是通过执行类似

的操作将.gcno文件发布到$GCOV_PREFIX
rsync -acv --filter='+ */' --filter='+ *.gcno' --filter='- *' <directory-containing-object-files> $GCOV_PREFIX