Если вы вызываете gcov самостоятельно, вам нужно запустить его из того же каталога, где был выполнен компилятор, и вам нужно указать либо путь к gcno, gcda, либо к исходному файлу.Gcov может обрабатывать только один входной файл за раз.
Когда gcov работает в правильном месте, он может просмотреть метаданные компиляции, чтобы найти правильный исходный файл.Если есть ошибки об отсутствующих исходных файлах, это означает, что вы не использовали правильный каталог.
Gcovr автоматически запускает gcov и имеет эвристику, чтобы определить правильный каталог.Однако вы все равно должны запускать его из каталога, в котором вы начали компиляцию (обычно это каталог сборки).
И gcovr исключит данные покрытия, если они не принадлежат вашему проекту.Если у вас есть отдельный каталог для сборки, вам нужно установить аргумент --root
для каталога, содержащего ваш исходный код.Gcov обрабатывает данные покрытия для всех файлов, которые были скомпилированы, что делает эту последующую обработку gcovr необходимой.
В подробном режиме gcovr выведет «Анализ данных покрытия для », когдаоткрытие отчета gcov.Затем он будет использовать данные в файле, чтобы решить, принадлежит ли он вашему проекту, и выведет «Фильтрация данных покрытия», если исходный код является частью вашего проекта, в противном случае «Исключение данных покрытия».
Существует несколькопричины, по которым отчет о покрытии может быть неполным:
- Существует проблема с фильтрацией.
- Эвристика Gcovr может запутаться, когда несколько файлов имеют одно и то же имя, например, два файла с именем
util.h
в разных каталогах. - Отчет Gcovr --html-details состоит из нескольких файлов .html, поэтому убедитесь, что все они доступны.
В вашем BAT-файле этовызов может работать лучше:
gcovr --root ../src --print-summary --sort-percentage --html-details --gcov-executable %GCovpath%gcov.exe --output Test.html --verbose
при условии следующей структуры каталогов и при запуске gcovr из build/
:
your-project/
src/
Header/
...
Source/
...
Testing/
...
build/
...
Если есть проблемы с корневым путем, таким как ../src
, рассмотрите возможность использования абсолютного пути, например C:/path/to/the/src
.