Можно ли с помощью gcov объединить файлы .gcda? - PullRequest
10 голосов
/ 02 июля 2010

У меня одинаковые исходные файлы (C и Obj-C), скомпилированные в две цели: исполняемый модуль модульного теста и реальный продукт (который затем проверяется на интеграцию). Две цели строятся в разных местах, поэтому объектные файлы, файлы .gcno и .gcda являются отдельными. Не все исходные файлы скомпилированы в модульный тест, поэтому не все объекты будут там существовать. Все исходные файлы скомпилированы в сборку продукта.

Есть ли способ объединить два набора файлов .gcda, чтобы получить общее покрытие для модульных тестов и интеграционных тестов (в том виде, в каком они выполняются в сборке продукта)?

Я использую lcov.

Mac OS X 10.6, GCC 4.0

Спасибо!

Ответы [ 3 ]

9 голосов
/ 10 сентября 2013

Наконец мне удалось решить мою проблему с помощью lcov.

По сути, я сделал следующее:

  • Скомпилируйте приложение с флагами -fprofile-arcs -ftest-coverage --coverage
  • Распространите копию приложения на каждый узел.
  • Запустите приложение на каждом узле параллельно.(Этот шаг создает в каталоге приложения на узле доступа информацию о покрытии)
  • Пусть lcov выполнит свою работу:
    • lcov --directory src/ --capture --output-file coverage_reports/app.info
  • Generateвывод html:
    • genhtml -o coverage_reports/ coverage_reports/app.info

Я надеюсь, что это может кому-то помочь.

6 голосов
/ 30 июля 2010

Поскольку вы используете lcov, вы сможете преобразовать файлы gcov .gcda в файлы lcov и объединить их с lcov --add-tracefile.

С man-страницы: Добавить содержимое файла трассировки.Укажите несколько файлов трассировки, используя ключ -a для объединения данных покрытия, содержащихся в этих файлах, путем суммирования количества выполнений для сопоставления комбинаций тестов и имен файлов.

0 голосов
/ 20 апреля 2017

Я объединяю его по многодисковым параметрам lcov, как показано ниже.Это работает.

lcov -c -d ./tmp/ -d ./tmp1/ -o ./tmp/coverage.info
...