“用于代码覆盖率测试的gcov工具已被重新实现。新版本使用LLVM项目中的llvm-cov工具。对于所有重要功能,它在功能上等同于旧版本。gcov在Xcode中的位置也已经移动,使用xcrun来调用它。如果您发现问题,请提交错误报告。对于此版本,您仍然可以使用GCC提供的旧版本gcov,即gcov-4.2。”
我在跟随几篇教程博客(这里,这里和这里)之后才意识到,在正确设置环境后- 在测试时在模拟器的构建文件夹中生成.gcda/.gcno 文件 - 并让报告生成工具(这里)尝试将它们解析成报告。(即一个./getcov脚本,该脚本收集您的环境变量以传递给lcov-1.10脚本以生成报告)
第一个障碍是新捆绑的
gcov
程序不支持使用-v
参数获取版本,而这是lcov
初始化的第一步。看起来似乎是个非起点,但阅读上面的发布说明后,我修改了lcov
脚本以使用旧版的gcov-4.2
版本,并解决了这个问题。然而,
lcov
在处理我的覆盖率数据文件时就出现了错误。这导致报告只包含了项目中按字母顺序排列的前10个文件左右,对我来说并没有什么用处。错误输出也很少且没什么帮助:
geninfo: ERROR: GCOV failed for (build_artifacts)/(class_that_errored).gcda!
我修改了lcov
脚本以打印它所得到的错误(不幸的是只得到了11
,在gcov(-io).c代码中找不到任何参考),并继续操作而不是退出,因此报告中留下了更多的文件,但仍有大约85%的源文件像上面那样出错。
我能够看出成功出现在报告中的文件和抛出错误的文件之间唯一的模式是任何使用内联块声明的文件都会失败。所有通过的文件都没有使用块,我检查过的所有失败的文件都包含块。奇怪。
然后我发现我可以在 CoverStory 中打开单独的 .gcda 文件,包括那些在lcov
脚本中出错的文件。在覆盖率报告下方的消息窗口中,所有出错的文件都会显示警告信息:
我目前最好的假设是,新的 XCode 5.1 生成的 .gcda 文件与旧的(class_that_errored).gcno:no lines for '__copy_helper_block_'
(class_that_errored).gcno:no lines for '__destroy_helper_block_'
gcov-4.2
程序无法处理块声明相关的问题。但是我已经尝试了我能想到的一切,所以我来这里问问是否有人知道我错过的知识,或者有任何想法来进一步调试。如果有人成功地使用今天的 XCode 5.1 更新和新的
gcov
测量测试覆盖率,我也很想听听您所做的任何更改。