【问题标题】:How to deal with .gcda and .gcno files in different directory by lcov & code coverage compare如何通过 lcov 和代码覆盖率比较处理不同目录中的 .gcda 和 .gcno 文件
【发布时间】:2015-03-12 11:08:15
【问题描述】:

我可以使用 .gcda 文件和 .gcno 文件在同一目录中通过 lcov 生成 .info 文件,但是如何在不同位置使用 .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: no valid records found in trace file'

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

有什么想法吗?谢谢

【问题讨论】:

    标签: ios code-coverage gcov lcov


    【解决方案1】:

    为了避免让其他人感到困惑,需要先清除一些事情。

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

    【讨论】:

    • 如果环境变量GCOV_PREFIX设置为某个路径,gcov将该路径添加到.o文件中的绝对路径前面,并在那里生成.gcda文件。
    【解决方案2】:

    如果设置了环境变量GCOV_PREFIX,就会发生这种情况。见here 建议的解决方案是通过执行类似的操作将.gcno 文件发布到$GCOV_PREFIX

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

    【讨论】:

      最近更新 更多