Почему gcovr генерирует пустую статистику покрытия?

Я не понимаю, как использовать gcov. У меня есть проект cmake, в котором есть два тестовых исполняемых файла, использующих googletest. Я добавил необходимые флаги в свой скрипт cmake:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -g -O0")

И я перекомпилировал свой код (используя CLion и g++ 10.1).

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

gcovr . 

из корня дерева сборки (правильно?), однако вывод такой:

(base) ciaran@DESKTOP-K0APGUV:/mnt/d/libOmexMeta/cmake-build-release-wsl-ubuntu1804-gcc101$ gcovr .
------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
------------------------------------------------------------------------------
TOTAL                                          0       0    --%
------------------------------------------------------------------------------

Любая идея, что я делаю неправильно?

#Edit Также работает

gcovr -r . --html --html-details -o example-html-details.html

Работает, но генерирует пустой отчет


person CiaranWelsh    schedule 03.07.2020    source источник
comment
Вы проверили, что все исходные файлы действительно были перекомпилированы? Возможно, вам придется make clean или эквивалент.   -  person Nate Eldredge    schedule 03.07.2020
comment
Да, я удалил каталог сборки, перекомпилировал, а затем запустил gcovr, но все равно получаю пустой html-документ.   -  person CiaranWelsh    schedule 03.07.2020
comment
В данном случае это не проблема, но при отладке, почему gcovr не показывает ваши файлы, может быть полезно запустить его в режиме --verbose. Как правило, проблема либо в том, что gcovr путается с путями и думает, что ваш исходный код не является частью вашего проекта, либо в том, что gcov не удается должным образом вызвать gcov. Также обратите внимание, что gcovr еще не тестировался с GCC 10 (набор тестов все еще работает на GCC 5…)   -  person amon    schedule 03.07.2020
comment
Я использую gcov-10, который, как я предполагал, был протестирован с gcc-10. Все еще играю с этим, но полезно знать, что есть подробный режим!   -  person CiaranWelsh    schedule 03.07.2020
comment
да, gcov-10 является частью GCC 10. Но gcovr — это сторонний проект   -  person amon    schedule 03.07.2020


Ответы (1)


Вы должны предоставить исходные файлы:

-r , --корень

Корневой каталог ваших исходных файлов. По умолчанию «.», текущий каталог. Имена файлов сообщаются относительно этого корня.

Если вы создадите и исчерпаете исходный каталог, он может не найти то, что ему нужно.

person Manuel    schedule 03.07.2020
comment
почти: gcovr также должен вызываться из каталога, в котором выполнялся компилятор. Для cmake это означает, что правильный вызов gcovr обычно выглядит как cd build && gcovr --root .. - person amon; 03.07.2020
comment
@amon вот что я предлагаю, параметр -r должен иметь исходный каталог, а не ., если сборка находится в другом каталоге, как он говорит. - person Manuel; 03.07.2020