lcov не работает должным образом для покрытия

Я пытаюсь получить покрытие html для теста, используя gcc 4.8.2 и lcov 1.10. Я уверен, что мои исходные тексты, объекты и файлы gcov находятся в одном месте и что я запускаю lcov из каталога, из которого также запускал мой компилятор.

Я получаю следующую ошибку:

$ lcov --capture --directory "objs/i386/MinGW/Os_SingleCore_SC3
/IocTest_tests_SingleCore_SC3" --output-file coverage.info
Capturing coverage data from objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3
Found gcov version: 4.8.2
Scanning objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3 for .gcda files ...
Found 3 data files in objs/i386/MinGW/Os_SingleCore_SC3/IocTest_tests_SingleCore_SC3
Processing IocTest_tests_SingleCore_SC3/IocTest.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#IocTest.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\IocTest.c
Processing IocTest_tests_SingleCore_SC3/OS_REQ.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#OS_REQ.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\OS_REQ.c
Processing IocTest_tests_SingleCore_SC3/TestMain.gcda
geninfo: WARNING: cannot find an entry for objs#i386#MinGW#Os_SingleCore_SC3#IocTest_tests_SingleCore_SC3#TestMain.c.gcov in .gcno file, skipping file!
geninfo: WARNING: no data found for /cygdrive/e/testRepo/WinPort-Os-cd354a27d1d9/WinPort/Os/Tests/OS_REQ/objs\i386\MinGW\Os_SingleCore_SC3\IocTest_tests_SingleCore_SC3\TestMain.c
Finished .info-file creation

2 ответа

Во-первых, я бы предложил проверить правильность данных gcov. Значит нужно запустить gcov tool и проверить файл *.gcov на фактический результат. Если он возвращает какое-либо покрытие.

Во-вторых, вы можете использовать, например, --base-directory

$ lcov --base-directory .  --directory . -c -o gcov/lcov.info

Обновите CMakeList.txt, чтобы добавить следующие флаги:

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

перейти к созданию каталогаcd {project/lib} rm -rf * //Remove all items if you want cmake .. make ./MyTest // Запуск тестовых случаев для получения файлов.gcda. Могут быть и другие способы создания файлов gcda, но я предпочитаю этот способ

lcov --capture --directory . --output-file AnyName.info //AnyName.info будет содержать выводgenhtml AnyName.info --output-directory CODE_COVERAGEВы найдете один каталог CODE_COVERAGE в текущем каталоге, перейдите в CODE_COVERAGE и дважды щелкните на index.html, он покажет текущее покрытие кода для тестовых случаев.

cd {project/lib} rm -rf * cmake .. make ./MyTest lcov --capture --directory . --output-file AnyName.info genhtml AnyName.info --output-directory CODE_COVERAGE

Я нашел эти шаги для работы: https://codeflu.blog/2014/12/26/using-gcov-and-lcov-to-generate-beautiful-c-code-coverage-statistics/

Вы сначала скомпилировали -g -O0 а также --coverage флаги? Вы скопировали файлы.gcno из каталога сборки в тот же каталог, где находятся файлы.gcda?

Вы пытались добавить опцию --ignore-errors gcov, source, graph? Это может на самом деле работать с некоторыми файлами, и это будет гарантировать, что lcov продолжит работать после любых проблемных файлов. Если вы обнаружите, что файлы работают, вы можете сделать шаг назад и выяснить, почему указанные выше файлы не работают для lcov. Возможно, им не хватает соответствующих им файлов.gcno.

Другие вопросы по тегам