Когда я создаю отчет о покрытии для программы 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 ищет все подкаталоги текущего рабочего каталога.