profiling:invalid arc tag (0x...)
似乎这不会影响测试,因为测试已经成功完成了,并且GCDA覆盖文件也如预期生成。
不知道这条消息是什么意思,或者如何禁止这些消息/解决问题,因为它们会混淆构建输出并使查找测试结果变得困难。
profiling:invalid arc tag (0x...)
似乎这不会影响测试,因为测试已经成功完成了,并且GCDA覆盖文件也如预期生成。
不知道这条消息是什么意思,或者如何禁止这些消息/解决问题,因为它们会混淆构建输出并使查找测试结果变得困难。
很可能这是由于构建工具无法将当前结果合并到现有的 .gcda 覆盖文件中导致的。正如 Dave Meehan 在这里指出的那样,有一种强制的方法是通过清理产品构建文件夹来处理,但一种较不过激的方法是在生成它们的目标(对我而言,只是测试目标)作为构建过程的一部分删除 .gcda 文件。 Dave 包含了一个脚本示例可作为构建阶段包含,或手动放置到项目根目录中:
find . -name "*.gcda" -print0 | xargs -0 rm
.gcda
的文件,并将它们删除。 - bigkm对于Xcode 7用户,你可能会想知道为什么你的单元测试在收到像这样的消息后崩溃了。我发现的解决办法是,确保构建流程中涉及的所有可能目标(包括所有库)都将这两个构建设置设置为NO:
GCC_GENERATE_TEST_COVERAGE_FILES = NO;
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
如果您在构建设置中搜索“代码生成”部分,您将找到以下选项:“生成测试覆盖文件”和“检测程序流程”。
更多信息请参见https://developer.apple.com/library/ios/qa/qa1514/_index.html
虽然这是一个老问题,但现在Xcode 7 GM已经发布,这种行为没有改变。我认为问题出在测试应用程序目标的代码覆盖率与主目标的代码覆盖率发生冲突。
假设您实际上并不关心测试目标的代码覆盖率,这些设置可以避免出现错误,而无需额外的脚本或删除文件:
在您的主要目标(无论是框架还是应用程序)中设置:
Enable Code Coverage Support to YES
Generage Legacy Test Coverage Files to YES
Instrument Program Flow to YES
为了我的目的,我只在调试构建中进行了此操作,但您的需求可能有所不同。
然后在您的测试目标中设置:
Enable Code Coverage Support to NO
Generage Legacy Test Coverage Files to NO
Instrument Program Flow to NO
这样做解决了错误信息,同时仍然允许适当地创建代码覆盖率文件。
虽然这个问题早已存在,但由于在XCode 7中仍然出现错误,我发现这种解决方案比使用特殊脚本删除文件更好。
appDelegate
中,在applicationWillTerminate:
下,我有__gcov_flush();
。将其注释掉可以消除构建输出中的invalid arc tag
消息。DerivedData
目录,这些消息将在我的测试运行几次后停止。
编辑:我似乎已经为自己解决了这个问题。在我的appDelegate中,我有以下内容:#ifdef DEBUG
+ (void)initialize {
[[NSUserDefaults standardUserDefaults] setValue:@"XCTestLog,GcovTestObserver"
forKey:@"XCTestObserverClass"];
[super initialize];
}
#endif
我把GcovTestObserver
拼错了,纠正后消息就停止显示了。请确保在测试目标中还有XCTestObserver
的子类,覆盖stopObserving
方法并添加以下内容:
- (void) stopObserving
{
[super stopObserving];
UIApplication* application = [UIApplication sharedApplication];
[application.delegate applicationWillTerminate:application];
}
你可能想要清除 所有 派生数据文件夹。特别是如果你升级了 Xcode 或使用多个 Xcode 版本。
有一次我在我们的集成服务器上将 Xcode 从 6.2 升级到 6.3 后就遇到了这个问题,我们在日志中看到了这些消息,以及由 frankencover.it 生成的覆盖率报告中缺少的类。删除集成服务器内部的 DerivedData
文件夹可以解决这个问题。
find /Library/Developer/XcodeServer -name DerivedData -print0 | xargs -0 rm -rf
我花了一些时间试图找出如何摆脱那些丑陋和烦人的消息:
profiling: /Users/appfactory/Desktop/WORK/App/trunk/ObjectiveC.gcda: cannot merge previous GCDA file: corrupt arc tag (0x00000000)
这似乎是Xcode 7的问题,在当前的Xcode 7.1 beta 2中没有得到解决。
问题是由于未能将现有的.gcda覆盖率文件与当前结果合并而引起的。
我尝试过:
echo "Delete .gcda files" echo "${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH}"
注意:ObjectiveC.gcda文件可能位于不同的位置!
将以下构建设置设置为YES-也没有帮助
启用代码覆盖支持为YES
生成传统测试覆盖文件为YES
仪器程序流程为YES
我的解决方案:
为主要目标设置以下构建设置
启用代码覆盖支持为 YES
生成传统测试覆盖率文件为 YES
不对程序流进行仪器测量
为测试目标(以及任何其他目标)设置以下构建设置
启用代码覆盖支持为 NO
生成传统测试覆盖率文件为 NO
不对程序流进行仪器测量
希望有所帮助!