Xcode 7.0 和 7.1,代码覆盖打开,单元测试崩溃“无法合并以前的 GCDA 文件:损坏的弧标签”

Posted

技术标签:

【中文标题】Xcode 7.0 和 7.1,代码覆盖打开,单元测试崩溃“无法合并以前的 GCDA 文件:损坏的弧标签”【英文标题】:Xcode 7.0 and 7.1, code coverage turned ON, unit test crash "cannot merge previous GCDA file: corrupt arc tag" 【发布时间】:2015-10-22 19:34:50 【问题描述】:

Xcode 7 beta 以来我们一直遇到此问题,并且该问题在 Xcode 7.1 中一直存在。

基本上我们不能在 Xcode 中开启代码覆盖。在 Xcode 6 中,这运行良好,但自 Xcode 7 以来一直被破坏。在单元测试运行结束时,我们得到无限的控制台输出:

profiling: /Users/<my path to app>/ObjectiveC.gcda: cannot merge previous GCDA file: corrupt arc tag (<some hex address>)

此输出会重复,直到应用崩溃。我只是不知道为什么会发生这种情况,并且解决此问题的所有尝试都失败了(除了关闭检测程序流和关闭代码覆盖率)。我什至尝试设置一个构建阶段运行脚本来查找并清除以前的代码覆盖文件,但这也不起作用。

有人知道吗?

【问题讨论】:

【参考方案1】:

感谢@gagarwal 的指导。我只需要找出一个不同的詹金斯报告工具,因为需要旧的代码覆盖率文件,但我想不再支持了。以下是一些屏幕截图,用于说明根据 gagarwal 的建议生成可在 Xcode 中查看的代码覆盖率报告的设置:

----------------------        
main app target config
----------------------

----------------------
test app target config
----------------------

------------------------------------------
Scheme config (see "Gather coverage data")
------------------------------------------

【讨论】:

【参考方案2】:

Xcode 7 的新代码覆盖功能使用LLVM coverage format。

Xcode 7 还为代码覆盖率提供了新的构建设置: “CLANG_ENABLE_CODE_COVERAGE”

确保“CLANG_ENABLE_CODE_COVERAGE”设置为“YES”,以下设置为 NO:

GCC_GENERATE_TEST_COVERAGE_FILES = 否; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = 否;

【讨论】:

感谢@gagarwal。我回答了自己的问题,以便添加屏幕截图。

以上是关于Xcode 7.0 和 7.1,代码覆盖打开,单元测试崩溃“无法合并以前的 GCDA 文件:损坏的弧标签”的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 版本 5.1.1 (5B1008) - 在 iOS 7.0 而不是 7.1 上运行模拟器

UIPopoverController 的大小调整行为在 iOS 7.0 和 iOS 7.1 之间有所不同

XCode 5.1 单元测试覆盖分析在使用块的文件上失败

Xcode 7 代码覆盖率 - 无覆盖率数据

在到达我的代码之前,应用程序在运行时崩溃 xcode6.1 Universal App Objective-C NSKeyedUnarchiver iOS 7.0 iOS 8.1

iOS 模拟器 Xcode 7.1 和 Xcode 7.2 的不同列表