Получить покрытие для файлов в других каталогах с gcvor - PullRequest
0 голосов
/ 29 марта 2019

Я здесь с проблемой, не получаю файлы cpp в выводе gcovr.На самом деле мой основной проект состоит из множества файлов sub cpp, но они расположены в разных путях каталогов.

Макет каталога:

  • D:\selv_ar\GCovTest\ado\cic\rc_actuator_switch\ulf\src (исходный каталог)
    • test\devices\puu_driver\sw (основной каталог проекта)
    • core\devices\puu_driver (вложенные файлы)
    • test\testtools (вложенные файлы)
    • test\devices\puu_driver (рабочее пространство)

У меня есть простая программа hello world с файлами main.cpp, helloworld.h и helloworld.cpp в одном каталоге.

Примечания:

  • Я компилирую во встроенную цель debgcov_qnx660_qcc_x86 и копирую файлы gcda в тот же каталог, что и исходные файлы.
  • Я запускаю gcovr из основного каталога проекта.

Вопросы:

  • Когда я создаю отчет о покрытии для программы hello world, почему он не показывает файл helloworld.h?

  • Когда я создаю отчет о покрытии для своего реального программного обеспечения, он показывает покрытие для файлов в основном каталоге проекта.Почему он не показывает покрытие для подфайлов?

  • Из какого каталога мне следует запустить gcvor?Основной каталог?Исходный каталог?Рабочая область?

  • Где мне разместить файлы gcda?В основной каталог проекта?В каталоги подфайлов?

1 Ответ

0 голосов
/ 05 апреля 2019

Когда я создаю отчет о покрытии для программы hello world, почему он не показывает файл helloworld.h?

Gcovr сообщает о файле, только если он содержит исполняемый код. Заголовочные файлы обычно содержат только объявления, но не определения функций. Вы можете проверить, был ли этот файл просмотрен, запустив gcovr в режиме `--verbose``.

Некоторые версии GCC содержат ошибку, из-за которой файлы с нулевым покрытием не сообщаются, даже если они содержат исполняемый код. См. FAQ по gcvor [1] для версий компилятора, которые это исправляют.

[1]: извините, основной сайт gcovr.com в данный момент недоступен.

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

Gcovr пытается отфильтровать данные покрытия, не относящиеся к вашему проекту, например, данные покрытия для стандартной библиотеки.

  • Gcovr сохраняет данные покрытия, только если путь к файлу соответствует -f / --filter.
  • Если фильтры не указаны, путь должен быть в каталоге -r / --root.
  • Если явно не указано --root, используется текущий рабочий каталог.

Поэтому, когда вы запускаете gcovr без аргументов, таких как --filter или --root, gcovr будет отображать покрытие только для файлов в текущем рабочем каталоге.

Чтобы исправить это, укажите корневой путь, содержащий все каталоги, для которых вы хотите охватить, например --root ../ или --root D:/selv_ar/GCovTest/ado/cicrc_actuator_switch/ulf/src.

Или вы можете предоставить фильтры, которые соответствуют всем файлам, которые вас интересуют. Обратите внимание, что фильтры являются регулярными выражениями, поэтому вам нужно экранировать специальные символы, такие как .. Кроме того, используйте косую черту для путей в регулярном выражении. Пример в синтаксисе оболочки:

$ gcovr --root . \
    -f 'D:/selv_ar/GCovTest/ado/cicrc_actuator_switch/ulf/src/(test|core)/devices/puu_driver/' \
    -f 'D:/selv_ar/GCovTest/ado/cicrc_actuator_switch/ulf/src/test/testtools/'

Убедитесь, что вы используете gcovr версии 4 или новее для правильной работы фильтров в Windows. Если вы хотите использовать пути в стиле --root ../, вам следует использовать gcovr 4.2 (пока не выпущено, пока установите версию для разработки из GitHub).

Из какого каталога мне следует запускать gcvor? Основной каталог? Исходный каталог? Рабочая область?

Где возможно, gcovr должен запускаться в том же каталоге, где работает GCC. Обычно это означает, что ваш каталог сборки. Если GCC работает в нескольких каталогах, попробуйте использовать родительский каталог для всех них. Используйте --root, --filter и аргументы пути поиска, чтобы указать подходящие пути к исходному коду и файлам gcda.

Куда мне положить файлы gcda? В основной каталог проекта? В каталоги подфайлов?

Файлы .gcda должны быть расположены рядом с соответствующими объектными файлами .o и файлами .gcno, которые генерирует компилятор. Это важно, чтобы можно было найти правильные исходные файлы.

Если вы используете кросс-компиляцию, сбор данных покрытия, который работает, может быть более сложным. Если у вас возникли проблемы, прочитайте о GCOV_PREFIX в главе «Кросс-профилирование» документации GCC и gcovr, проблема # 259 .

Gcovr ищет gcda-файлы в путях поиска: любые (безымянные) параметры, которые вы передаете gcovr. Например, gcovr --root foo bar qux указывает два пути поиска bar и qux. По умолчанию gcovr ищет все подкаталоги текущего рабочего каталога.

...