2015-10-30 50 views
1

我第一次在Xcode 7中運行我的單元測試,重構我的Swift代碼爲2.0並修復所有各種新的編譯器警告和錯誤。不過,我看到一些不同的行爲,可能都是相關的。Xcode 7代碼覆蓋率亂拋垃圾項目目錄與GCDA文件

  1. 作爲單元測試的結論,我得到一個gcda文件爲每個系統框架我對鏈接傾入我的項目的根目錄下(如QuartzCore.gcdaCoreData.gcda
  2. 我收到以下錯誤一長串:

    <項目根> /CoreGraphics.gcda:不能合併以前GCDA文件:腐敗弧標籤(0x00000017)

  3. 網絡應受,我得到一個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

在Xcode 7.1.1中,它可能是一個缺陷__gcov_flush()。我把它掛,並修復它如下:

  1. 在調用__gcov_flush()文件,與#import 「GCDAProfiling.h」更換extern void __gcov_flush(void);GCDAProfiling.cGCDAProfiling.hInstrProfilingUtil.cInstrProfilingUtil.hhttps://github.com/liuslevis/GCDACorruptionFix

  2. 構建和運行:

  3. 然後將此文件拖動到你的Xcode項目。

我添加功能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/

+0

頁面鏈接到也很難讀,因爲它顯然是雙語的,一門亞洲語言和英語之間的交替。如果你能在你的答案中總結出來,那將會非常有幫助。 – Dov

+0

詳細信息已更新,希望對您有所幫助 –