Покрытие кода, не показывающее результаты с помощью Xcode + gcov

Я пытаюсь получить покрытие Code для симулятора iPhone и всегда получаю покрытие в размере 0%. Ниже приведены сведения о конфигурации и шаги, которые я пробовал.

конфигурация

Xcode 3.2.5 / iOS 4.1 и iOS 4.2 / Mac 10.6 / GCC 4.2 Приложение UICatalog

Рекомендации

http://www.cubiclemuses.com/cm/articles/2009/05/14/coverstory-on-the-iphone/

http://developer.apple.com/library/mac/#qa/qa2007/qa1514.html

меры

  • Включить «Генерировать файлы тестового покрытия»
  • Включить «Прикладной программный stream»
  • Добавьте « -lgcov » в «Другие флаги компоновщика»
  • Флаг UIApplicationExitsOnSuspend в Info.plist установлен в значение true

результат

У меня есть файлы .gcda, но покрытие всегда показывает 0%.

Настройки пытались

  1. Изменение GCC до 4.0 и 4.2. Когда я пытаюсь изменить GCC на 4.0, я получаю 26 ошибок сборки.

  2. Установите переменные среды

     (const char *prefix = "GCOV_PREFIX"; const char *prefixValue = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] cStringUsingEncoding:NSASCIIStringEncoding]; // This gets the filepath to the app's Documents directory const char *prefixStrip = "GCOV_PREFIX_STRIP"; const char *prefixStripValue = "1"; setenv(prefix, prefixValue, 1); // This sets an environment variable which tells gcov where to put the .gcda files. setenv(prefixStrip, prefixStripValue, 1); // This tells gcov to strip the default prefix, and use the filepath that we just declared.) 
  3. Оптимизация GCC установлена ​​на None (-O0) и снят флажок precompiled prefix header file.

Спасибо за всю информацию о stackoverfow и CubicleMuses

У меня есть покрытие кода, работающее как для симулятора, так и для устройства! Вот шаги и настройки, которые работали для меня:

Конфигурация: Xcode 4!

Настройки проекта XCode

Настройки сборки

  • Другие флаги компоновщика: добавьте «-lgcov»

  • GCC_GENERATE_TEST_COVERAGE_FILES: установите значение YES

  • GCC_INSTRUMENT_PROGRAM_FLOW_ARCS: установить в YES

  • Версия компилятора C / C ++: GCC 4.2 (если вы на XCode 4) objective развертывания iOS: 4.2
  • Заголовок префикса предварительного компилятора: НЕТ

Info.plist

  • Установите флаг UIApplicationExitsOnSuspend в свой Info.plist в YES

Выше шаги одинаковы для Simulator и Device, однако у нас есть дополнительная работа, чтобы заставить его работать на устройстве.

Main.m : скопируйте код ниже на main.m

 const char *prefix = "GCOV_PREFIX"; const char *prefixValue = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] cStringUsingEncoding:NSASCIIStringEncoding]; // This gets the filepath to the app's Documents directory const char *prefixStrip = "GCOV_PREFIX_STRIP"; const char *prefixStripValue = "1"; setenv(prefix, prefixValue, 1); // This sets an environment variable which tells gcov where to put the .gcda files. setenv(prefixStrip, prefixStripValue, 1); // This tells gcov to strip the default prefix, and use the filepath that we just declared. 

Примечание. Убедитесь, что код выше:

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; 

Почему мы устанавливаем указанные выше переменные охвата?

http://gcc.gnu.org/onlinedocs/gcc/Cross_002dprofiling.html

Как получить файлы .gcda?

Используйте Organizer в Xcode, чтобы загрузить пакет приложения с устройства, чтобы получить .gcda-файлы из каталога Documents.

Примечание. Я не смог получить покрытие кода с помощью Xcode 3.2.5 с теми же настройками. Но Xcode 4 был торт-ходом 🙂

Спасибо Сангави, так как ваш ответ мне помог.

Теперь но: я шаг за шагом следил за вашими описаниями, и у меня возникла проблема с тем, что gcda-файлы не были созданы (только gcdo-файлы).

После этого я удалил префикс-код (выше), который я скопировал в main.m, и все работало внезапно. Ставка gcov-path не была создана правильно или что-то еще.

Просто опубликуйте это, если кто-нибудь столкнется с той же проблемой.

Я просто выяснил после нескольких часов разочарования, что включение распределенных сборок в Xcode 3.2.6 обойдется в необходимости отключить заголовок префикса.

У меня возникла проблема, что файлы вообще не создавались. Это было в Xcode 4.1 на Lion.

Я сменил компилятор с System Default (GCC 4.2) на GCC 4.2 . Поэтому НЕ используйте систему по умолчанию.

Похоже на ошибку в Xcode, но она решила проблему для меня.
Когда я изменил предпочтение, проблема вернулась.

  • Код C ++ в файлах заголовков
  • URL-код, кодирующий символ пробела: + или% 20?
  • Почему большинство полей (участников classа) в учебнике Android начинаются с `m`?
  • Файлы заголовков C ++, разделение кода
  • Что означает точка в R - личное предпочтение, соглашение об именовании или более?
  • Как исправить кодировку символа файла?
  • Для чего используется кодировка base 64?
  • Соглашения Java: использовать getters / setters внутри classа?
  • Microsoft Excel управляет диакритикой в ​​CSV-файлах?
  • RStudio не выбирает кодировку, которую я говорю ей при чтении файла
  • Какую кодировку использует Microsoft Excel при сохранении файлов?
  • Давайте будем гением компьютера.