2009-09-06 3 views
15

Я использую Xcode 3.2 на 10.6 с поставляемой версией gcov и компилятором GCC по умолчанию (обе версии 4.2.1). Я создал зависимый набор тестовых модулей Cocoa, который вводится в мое приложение, и последовали за документацией Apple по адресу setting up a gcov-instrumented build configuration - на основе конфигурации Debug, в которой нет оптимизаций компилятора.Почему gcov не сообщает о каких-либо линиях, охватываемых моими модульными тестами?

Когда я создаю тестовый комплект с этой конфигурацией «Gcov-instrumented», приложение запускается и тесты вводятся и запускаются. Также файлы статистики покрытия создаются по адресу:

build/<AppTarget>.build/Gcov-instrumented/<AppTarget>.build/Objects-normal/x86_64/<object>.gcda

build/<AppTarget>.build/Gcov-instrumented/<AppTarget>.build/Objects-normal/x86_64/<object>.gcno

Пока все хорошо. Я знаю, что тесты действительно выполняются, потому что, если я вставляю отказы, тогда тестовый набор выходит из строя, как ожидалось. К сожалению, gcov сообщает, что никакие строки объектов не были покрыты тестами! Каждая строка отображается как 0. Я искал здесь и в архивах списков рассылки Apple, и не могу найти никого с аналогичной проблемой. Я ожидаю, что у меня что-то не хватает, но что это?

ответ

10

Я столкнулся с этой проблемой с перерывами. Я наткнулся на хорошую удачу, когда он был «главным образом работает» в моем основном проекте. В основном работая, я имею в виду, что я смог получить освещение, чтобы показать, но с немного большей болью, чем 10,5. Например, я должен был агрессивно удалить файлы покрытия и перестроить, чтобы получить какие-либо обновления. Даже в моем «едва работоспособном» состоянии компилятор/среда выполнения не желает перезаписывать существующий файл данных покрытия.

Думаю, я снова наткнулся на рабочий сценарий. Voodoo наверняка и не идеален:

  1. Убедитесь, что SDK 10.6.
  2. Убедитесь, что для развертывания установлено значение gcc 4.0 (!).
  3. Выполняйте полную очистку проекта.
  4. Перестроить.

Получает ли это данные о ожидаемых покрытиях?

Конечно, я ожидал бы, что вы сможете создавать файлы покрытия, которые работают с использованием gcc 4.2 или одного из компиляторов LLVM, но на данный момент это кажется мне немного менее искалеченным, чем раньше.

Другая подсказка: когда я наблюдаю данные покрытия (с помощью Google, Cover Story), я получаю предупреждения, как:

/BUILDRESULTS/MarsEdit.build/Code Coverage/MarsEditDataModelTests.build/Objects-normal/i386/MEDataItem.gcno:version '400A', prefer '402*'

Но информация охват по-прежнему представлена. Похоже, что это превзошло в более старой версии формата покрытия, но если я использую новый компилятор (4.2), который предположительно сгенерирует файлы более нового формата .gcno, проблема с охватом 0% поразит меня, как и Грэхема.

+0

Спасибо за это! Теперь я получаю покрытие, которое я ожидал бы :-) – 2009-10-13 08:25:07

+1

+1 Я получил его, работая с тем же самым подходом на Snow Leopard. Требование отказаться от GCC 4.0 несколько сбивает с толку, поскольку код, который должен быть скомпилирован с GCC 4.2 или LLVM (например, если он использует блоки), не будет работать в старой версии компилятора, и покрытие кода может исчезнуть. Это звучит как радар, ожидающий подачи ... –

+0

Даниэль, я сталкиваюсь с аналогичными проблемами при использовании lcov для создания отчетов о охвате HTML. Это позволяет мне передать '-gcov-tool/usr/bin/gcov-4.0', чтобы переопределить значение по умолчанию 4.2, на которое указывает'/usr/bin/gcov'. Я заглянул в источник CoverStory и использовал эту символическую ссылку. http://code.google.com/p/coverstory/source/browse/trunk/CoverStoryDocument.m # 131 Конечно, было бы неплохо, если бы они ** ** добавили для этого пользователя по умолчанию, даже если это не в диалоговом окне настроек ... –

2

Вы можете получить покрытие кода, работающее с gcc 4.2.1. Подробности здесь:

SnowLeopardGCov

+0

Содержимое этой страницы было заменено (по состоянию на 4 июня) сообщение «Эта страница устарела. Эта информация была объединена в Google Toolbox для Mac Wiki.» и ссылку на http://code.google.com/p/google-toolbox-for-mac/wiki/SnowLeopardGCov –

+0

Исправлена ​​новая улучшенная ссылка. Спасибо Peter – dmaclach

+0

, что не сработало для меня. Я установил компилятор в 4.2, удалил заголовки префикса и сделал совершенно чистую сборку целевого объекта тестирования. любой c излишняя информация вообще. – 2010-06-13 10:08:32

0

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

шаги

  • Включить «Генерация тестового покрытия файлов»
  • Включить «Instrument программы Flow»
  • Добавить «-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) и снят флаг скомпилированного файла заголовка префикс.
0

Я получал 0-го охвата, когда * .gcno-файлы для статической библиотеки были перезаписаны для общей библиотеки.

7

В Xcode 4.6 отчеты о покрытии просто работают. Включите «Генерировать файлы контрольных покрытий» и «Поток инструментальных средств» для целевой цели приложения, запустите тесты, а затем укажите инструмент охвата на выходе. Это в ~/Library/Developer/Xcode/Derived Data/<Project>-<hash>/Build/Intermediates/<Target>.build/Debug-iphonesimulator/<Target>.build; открытие этой папки в CoverStory показывает мне результаты, которые я ожидал.

This GitHub repository содержит скрипты, которые могут автоматически обнаруживать вывод и получать lcov для его визуализации; На данный момент я доволен CoverStory.

+0

Мой путь к файлам .gcda и .gcdo был несколько иным: ~/Library/Developer/Xcode/Производные данные/ - /Build/Intermediates/ .build/Debug-iphonesimulator/ .build/Objects-normal/i386 – Marco