Как заставить gcov и gcovr собирать исходные файлы и файлы заголовков

Я пытаюсь создать отчет о покрытии для проекта, используя файл .bat, как описано ниже.

  1. Я вижу очень мало файлов .gcov. Кроме того, когда я нажимаю ссылку на сгенерированный вывод html, я не вижу сведений о файле (ошибка «файл не найден»). Как мне это исправить?
  2. После запуска файла .bat я получаю такой результат, как «анализ данных покрытия для QString.h» (файлы библиотеки QT). Ожидается?

Я видел много связанных вопросов, но не могу понять

(in report_coverage.bat)
    set GCovrpath= C:\python37\script\lib\
    set GCovpath= C:\abc\ghj\bin\
    set datafiles= C:\source\mywork\root\testing\unittests\rose\build\debug\
    set gcovr_src= C:\source\mywork\root\

    %GCovpath%gcov.exe  %datafiles% >> output.log 
     gcovr %datafiles% -s -p --html --html-details --gcov-executable %GCovpath%gcov.exe -o Test.html –verbose

Вот подробности….

Скомпилируйте и выполните код, используя

QMAKE_CXXFLAGS + = -fprofile-arcs -ftest-охват

QMAKE_LFLAGS + = --coverage .GCNO и .GCDA файлы генерируются должным образом

Кажется, простая структура каталогов

 Root
     Header
           Rose
           Marigold
           Jasmin   
     Source
           Rose
           Marigold
           Jasmin   
     Testing
           UnitTests
               Rose
                  build
                       debug
               Marigold
                  build
                       debug
               Jasmin   
                  build
                       debug

Спасибо.

Обновление: см. ответ ниже.


person BeHappy    schedule 27.09.2019    source источник


Ответы (2)


Если вы вызываете gcov самостоятельно, вам нужно запускать его из того же каталога, в котором был запущен компилятор, и вам нужно указать ему путь к gcno, gcda или исходному файлу. Gcov может обрабатывать только один входной файл за раз.

Когда gcov запускается в правильном месте, он может просматривать метаданные компиляции, чтобы найти правильный исходный файл. Если есть ошибки об отсутствии исходных файлов, это означает, что вы использовали неправильный каталог.

Gcovr запускает gcov автоматически и использует эвристику для определения правильного каталога. Однако вы все равно должны запускать его из каталога, в котором вы начали компиляцию (обычно из каталога сборки).

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

В подробном режиме gcovr выведет «Анализ данных покрытия для ‹file>» при открытии отчета 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.

person amon    schedule 28.09.2019
comment
Спасибо, amon, за подробную информацию, однако я не понимаю, что мне не хватает. Кстати, я использую абсолютный путь. - person BeHappy; 01.10.2019

Не могу выделить достаточно "\" для windows.

запустите эту команду из папки отладки (потому что test.exe здесь)

gcov -b -l -s C:\source\mywork\root\ debug\*.gcno

запустите эту команду из папки модульных тестов (это исключит файлы .h и файлы, содержащие test)

gcovr -g -k -v  --root C:\source\mywork\root\ -e ".*\.h"    -e ".*test[_-|A-Z|a-z|0-9]*\.cpp"   --html --html-details -o report.html
person BeHappy    schedule 01.10.2019