Как заставить gcov и gcovr подобрать исходные и заголовочные файлы - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь создать отчет о покрытии для проекта, используя файл .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
               Marigold
               Jasmin   

Спасибо.

1 Ответ

0 голосов
/ 28 сентября 2019

Если вы вызываете 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.

...