I'm running my unit tests in Xcode 7 for the first time, after refactoring my Swift code for 2.0 and fixing all of the various new compiler warnings and errors. I'm seeing a few different behaviors, though, which are probably all related.
gcda
file for each system framework I link against dumped into my project root directory (e.g. QuartzCore.gcda
, CoreData.gcda
)< project root >/CoreGraphics.gcda: cannot merge previous GCDA file: corrupt arc tag (0x00000017)
Finally, I get an EXC_BAD_ACCESS
exception thrown, with this stack trace:
#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 ()
I have Enable Code Coverage Support and Generate Legacy Test Coverage Files turned on, though I've tried toggling the latter and it made no difference. I'm using Xcode 7.1 on OS X 10.10.5.
Turning on Gather coverage data for the scheme appeared to fix #3, but then it came back.
In Xcode 7.1.1, it might be a bug of __gcov_flush()
. I hook it and fix it as follow:
In the file that calls __gcov_flush()
, replace the extern void __gcov_flush(void);
with #import “GCDAProfiling.h”
.
Then drag this file to your Xcode project: GCDAProfiling.c
, GCDAProfiling.h
, InstrProfilingUtil.c
, InstrProfilingUtil.h
from https://github.com/liuslevis/GCDACorruptionFix
build and run.
I add function skip_special_file()
and adding overflow protection
to file GCDAProfiling.c
. Xcode does not crash anymore, and the counting of line of code recovered by command lgcov
from .gcda
file seems to be non-zero.
Ref.: http://davidlau.me/2015/12/05/Trying-to-fix-Xcode-7-GDCA-file-corruption/
User contributions licensed under CC BY-SA 3.0