Покрытие кода Xcode 7 засоряет каталог проекта файлами GCDA

Я впервые запускаю свои модульные тесты в Xcode 7 после рефакторинга своего кода Swift для 2.0 и исправления всех различных новых предупреждений и ошибок компилятора. Однако я вижу несколько разных поведений, которые, вероятно, все связаны.

  1. По завершении модульных тестов я получаю файл gcda для каждой системной структуры, с которой я связываюсь, сбрасываемой в корневой каталог моего проекта (например, QuartzCore.gcda, CoreData.gcda).
  2. Я получаю длинный список следующих ошибок:
    #P2#
  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 ()
    

У меня включены Включить поддержку покрытия кода и Создать файлы покрытия устаревших тестов, хотя я пробовал переключать последнее, и это не имело никакого значения. Я использую Xcode 7.1 на OS X 10.10.5.

Включение Сбора данных о покрытии для схемы казалось, помогло решить проблему № 3, но затем проблема вернулась.


person Dov    schedule 30.10.2015    source источник


Ответы (1)


В Xcode 7.1.1 это может быть ошибка __gcov_flush(). Я подключаю его и фиксирую следующим образом:

  1. В файле, который вызывает __gcov_flush(), замените extern void __gcov_flush(void); на #import “GCDAProfiling.h”.

  2. Затем перетащите этот файл в свой проект Xcode: GCDAProfiling.c, GCDAProfiling.h, InstrProfilingUtil.c, InstrProfilingUtil.h из https://github.com/liuslevis/GDACorruptionFix

  3. построить и запустить.

Я добавляю функции skip_special_file() и adding overflow protection в файл GCDAProfiling.c. Xcode больше не дает сбоев, и количество строк кода, восстановленных командой lgcov из файла .gcda, похоже, не равно нулю.

Ссылка: http://davidlau.me/2015/12/05/Trying-to-fix-Xcode-7-GDCA-file-повреждение/

person David X. Lau    schedule 20.04.2016
comment
Страницу, на которую ссылаются, также трудно читать, поскольку она, по-видимому, двуязычна, чередуя азиатский язык и английский. Было бы очень полезно, если бы вы могли обобщить это в своем ответе. - person Dov; 21.04.2016