Покрытие кода не показывает результаты с использованием Xcode + gcov - PullRequest
13 голосов
/ 24 февраля 2011

Я пытался заставить работать покрытие 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

Шаги

  • Включить «Генерировать тестовые файлы покрытия»
  • Включить «Поток программы прибора»
  • Добавить «-lgcov» в «Другие флаги компоновщика»
  • *Флаг 1032 * в 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 установлена ​​на Нет(-O0) и снимите флажок с файлом скомпилированного заголовка префикса.

Ответы [ 4 ]

19 голосов
/ 28 февраля 2011

Спасибо за всю информацию о 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) Цель развертывания iOS: 4.2
  • Заголовок префикса прекомпиляции: NO

Info.plist

  • Установите для флага UIApplicationExitsOnSuspend в вашем Info.plist значение YES

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

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?

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

Примечание: Я не смог получить покрытие кода, используя Xcode 3.2.5 с теми же настройками.Но Xcode 4 был пирогом: -)

2 голосов
/ 17 апреля 2011

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

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

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

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

1 голос
/ 09 мая 2011

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

0 голосов
/ 27 сентября 2011

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

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

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

...