gcovr 和 Xcode 5 的代码覆盖率不起作用

Posted

技术标签:

【中文标题】gcovr 和 Xcode 5 的代码覆盖率不起作用【英文标题】:code coverage with gcovr and Xcode 5 is not working 【发布时间】:2013-10-07 09:53:16 【问题描述】:

我正在使用 gcovr 为 cobertura 生成代码覆盖率。 xcode 4.6 一切正常。现在我更新到 xcode5,我得到的一切都是 0% 的覆盖率......

我的设置:

gcovr 3.0 Xcode 5 (Apple LLVM 5) “生成测试覆盖文件”设置为是 “仪器程序流程”设置为“是”

我使用的命令是:

gcovr -r . --object-directory Build/Intermediates/myApp.build/Debug-iphonesimulator/myApp.build/Objects-normal/i386 --exclude '.*Tests.*' --exclude '.*KiwiUnitTest' --exclude '.*main.*' --xml > reports/coverage.xml

是否有人遇到相同或更好的问题,有解决方案吗? :)

【问题讨论】:

Xcode5 Code Coverage (from cmd-line for CI builds)的可能重复 不,这不是骗子。 @GardnerBickford 的建议与生成 .gcno/.gcda 文件有关。这个问题与 gcovr 的使用(和故障)有关。 @Rayfleck 请再次阅读此问题以及答案 [ Xcode5 Code Coverage (from cmd-line for CI builds)](***.com/questions/18394655/…) 这就是升级到 Xcode 后 gcovr 无法正常工作的原因5 是因为 Xcode 5 编译器不会将 gcno/gcda 文件刷新到磁盘。 如果没有这些文件,gcovr 将报告没有覆盖范围。 @GardnerBickford - 啊,是的,我的立场是正确的。谢谢。我投票决定关闭这篇文章。 Xcode 5.1 修复了这个问题并添加了 llvm-cov 【参考方案1】:

现在它又可以工作了... :)

正如@kenji 所说,Xcode 5.1 解决了这个问题。顺便说一句

这是我的工作环境和配置,有兴趣的朋友可以看看

Xcode 5.1.1(来自 AppStore) gcovr 3.1-prerelease(使用 easy_install 安装)

在“构建设置”下的项目中,我设置了以下内容:

“生成测试覆盖文件”设置为是 “仪器程序流程”设置为“是”

运行测试后,我执行以下命令:(与 jenkins 发生)

gcovr -r . --object-directory Build/Intermediates/MyProj.build/Debug-iphonesimulator/KiwiUnitTest.build/Objects-normal/i386 --exclude '.*Tests.*' --exclude '.*KiwiUnitTest' --exclude '.*main.*' --xml > reports/coverage.xml

完成。

对不起,让你们等待答案,谢谢大家的帮助。

【讨论】:

【参考方案2】:

首先确保您的 .gcda 和 .gcno 文件已创建!

(检查:~/Library/Developer/Xcode/DerivedData/YOUR-PROJECT-NAME/Build/Intermediates/YOUR-PROJECT-NAME.build/Debug-iphonesimulator/YOUR-PROJECT-NAME。构建/对象-正常/i386)

如果它们已成功创建,您需要执行以下操作: (如果不检查您问题下的 cmets)

    将 i386 文件夹中的所有文件(如上所述的完整路径)复制到您的文件夹中 .h 和 .m 文件所在的工作区。

    运行终端并将您的父工作目录更改为您的工作区

     cd [YOUR WORKSPACE PATH]
    

    运行 gcovr

     gcovr -r . --xml  > reports/coverage.xml
    

如果您使用的是 jenkins(我假设),这将是您的进一步步骤: Generating gcda files to view the code-coverage from XCTests in ios with Jenkins

如果您还有问题,请告诉我!

【讨论】:

如果您定义 --object-directory,最新版本的 gcovr (v3.2) 似乎不会处理任何文件。只有将您的 .gcno 和 .gcna 文件复制到 -r 参数定义的路径,它才会起作用。 github.com/gcovr/gcovr/issues/61

以上是关于gcovr 和 Xcode 5 的代码覆盖率不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 gcov/lcov/gcovr 在 Android APK 下获取代码覆盖率

lcov 和 gcovr -r 命令正在为 UT 生成 cpp 文件代码覆盖率报告

展示C代码覆盖率的gcovr工具简单介绍及相关命令使用演示样例

是否可以将来自两个可执行文件的覆盖率数据与 gcov/gcovr 合并?

如何通过带有`if / else if / else`的gcovr获得100%的分支覆盖率

gcov代码覆盖率测试-原理和实践总结