在重构我的Swift代码2.0并修复所有各种新的编译器警告和错误之后,我第一次在Xcode 7中运行我的单元测试。我看到了一些不同的行为,这些行为可能都是相关的。
gcda
文件,我链接的每个系统框架都被转储到我的项目根目录(例如QuartzCore.gcda
,CoreData.gcda
)< project root> /CoreGraphics.gcda:无法合并以前的GCDA文件:corrupt arc tag(0x00000017)
最后,我得到一个EXC_BAD_ACCESS
异常抛出,带有这个堆栈跟踪:
#0 0x0000000105cf06b4 in llvm_gcda_emit_function ()
#1 0x0000000105845c0a in __llvm_gcov_writeout ()
#2 0x0000000105cf18e4 in llvm_writeout_files ()
#3 0x00007fff9641271b in __cxa_finalize_ranges ()
#4 0x00007fff96412a30 in exit ()
#5 0x0000000100056e9f in ___XCTestMain_block_invoke ()
#6 0x000000010000e7c9 in -[XCTestDriver _runSuite] ()
#7 0x000000010000f31a in -[XCTestDriver _checkForTestManager] ()
#8 0x0000000100056c69 in _XCTestMain ()
#9 0x0000000100001dc9 in ___lldb_unnamed_function3$$xctest ()
#10 0x00007fff9098d5c9 in start ()
#11 0x00007fff9098d5c9 in start ()
我已启用启用代码覆盖率支持和生成旧版测试覆盖率文件,但我尝试切换后者并没有任何区别。我在OS X 10.10.5上使用Xcode 7.1。
启用收集覆盖数据,方案似乎已修复#3 ,但之后又回来了。
答案 0 :(得分:0)
在Xcode 7.1.1中,它可能是__gcov_flush()
的错误。我把它挂钩并修复如下:
在调用__gcov_flush()
的文件中,将extern void __gcov_flush(void);
替换为#import “GCDAProfiling.h”
。
然后将此文件拖至您的Xcode项目:GCDAProfiling.c
,GCDAProfiling.h
,InstrProfilingUtil.c
,InstrProfilingUtil.h
来自https://github.com/liuslevis/GCDACorruptionFix
构建并运行。
我将函数skip_special_file()
和adding overflow protection
添加到文件GCDAProfiling.c
。 Xcode不再崩溃,并且来自lgcov
文件的命令.gcda
恢复的代码行的计数似乎不为零。
参考:http://davidlau.me/2015/12/05/Trying-to-fix-Xcode-7-GDCA-file-corruption/