Я пытался добиться, чтобы покрытие кода работало для симулятора 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» в «Другие флаги компоновщика».
  • Флаг 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 установлено значение Нет (-O0) и снят флажок прекомпилированного файла заголовка префикса.

13
Sangavi 24 Фев 2011 в 09:07
Можем ли мы сделать покрытие кода для устройства iphone? (т.е. не для симулятора)
 – 
GameLoading
3 Июн 2011 в 11:30

4 ответа

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

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

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

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

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

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

  • GCC_GENERATE_TEST_COVERAGE_FILES: установить на ДА

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

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

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 из каталога документов.

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

19
Sangavi 28 Фев 2011 в 12:57
Вау, после 2 недель головной боли я прочитал ваш пост и заработал примерно через 5 минут :) вы мой герой, спасибо
 – 
aryaxt
22 Май 2011 в 22:44
Даже после выполнения всех упомянутых шагов я не могу сгенерировать покрытие кода, поскольку файлы .gcda не создаются. Я настраиваю покрытие кода для своего приложения для Mac. У кого-нибудь есть похожая проблема?
 – 
Kiran Balegar
16 Авг 2011 в 16:09

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

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

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

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

2
vikpek 17 Апр 2011 в 17:57

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

1
James Moore 9 Май 2011 в 21:22

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

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

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

0
Mats Stijlaart 27 Сен 2011 в 11:55