Покрытие кода, не показывающее результаты с помощью Xcode + gcov
Я пытаюсь получить покрытие Code для симулятора iPhone и всегда получаю покрытие в размере 0%. Ниже приведены сведения о конфигурации и шаги, которые я пробовал.
конфигурация
Xcode 3.2.5 / iOS 4.1 и iOS 4.2 / Mac 10.6 / GCC 4.2 Приложение UICatalog
- Использование библиотеки FFMPEG с iPhone SDK для кодирования видео
- Excel в CSV с кодировкой UTF8
- Какой префикс вы используете для переменных-членов?
- Почему трассировка блоков стоит дорого?
- Как загрузить исходный () .R-файл с использованием кодировки UTF-8?
Рекомендации
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%.
Настройки пытались
-
Изменение GCC до 4.0 и 4.2. Когда я пытаюсь изменить GCC на 4.0, я получаю 26 ошибок сборки.
-
Установите переменные среды
(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.)
-
Оптимизация GCC установлена на None (-O0) и снят флажок precompiled prefix header file.
- В чем разница между кодировкой и кодировкой?
- Как изменить кодировку по умолчанию в NetBeans 8.0
- Почему возвращаемое значение String.addingPercentEncoding () необязательно?
- Почему значения cookie с пробелом поступают на стороне клиента с кавычками?
- Какова правильная кодировка HTTP-запросов?
- Пусть объект JSON принимает байты или позволяет выводить строки вывода
- Как закодировать WAV в mp3 на устройстве Android
- Чтение UTF-8 - маркер спецификации
Спасибо за всю информацию о 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, но она решила проблему для меня.
Когда я изменил предпочтение, проблема вернулась.