lcov не соответствует результатам покрытия gcov для юнит-теста googletest

Я пытаюсь собрать результаты покрытия в файле библиотеки foobar.cpp, создав модульные тесты googletest для файла souce, а затем используя gcov для результатов покрытия, наконец, используя lcov для создания HTML-документа.

Я получил модульное тестирование и результаты gcov для работы хорошо, НО lcov никогда не отображает правильные результаты покрытия, полностью пропуская мои результаты foobar.cpp .gcov?

У меня есть платформа для юнит-тестирования, настроенная по сути так:

Справочники:

~/svn/googletest-read-only/
/src
gtest_main.cc
gtest-all.cc
/include
~/code/proj/
foobar.cpp
foobar.hpp
~/code/proj/unittest/
foobar_test.cpp
Makefile

Все бегут от модульный тест/, я делаю unittest/ $ make, выполняя исполняемый файл foobar_test в этой папке. главный() в googletest / SRC / gtest_main.cc файл. Мой Makefile основан на googletest и имеет следующие важные настройки:

Makefile:

CXXFLAGS += -g -O0 --coverage -fprofile-arcs -ftest-coverage -Wall -Wextra -pthread
LDFLAGS = -lpthread -lgcov
foobar_test : foobar.o foobar_test.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@

Я запускаю исполняемый файл один раз $ ./foobar_test, Это создает .gcda для соответствия .gcno каждого источника (всего 4x: foobar, foobar_test, gtest_main и gtest-all).

Тогда беги $ gcov foobar.cpp только на foobar.cpp (я пробовал альтернативы, такие как $ gcov *.cpp а также … использование только foobar_test.cpp не работает). Это создает стандартный вывод, который включает в себя кучу дерьма / usr / lib, но также и МОЙ результат: Файл ‘../foobar.cpp’; Выполненные линии: 61,25% из 80; ..` и создает мои файлы .gcov.

Изучая мой файл .cpp.gcov, он показывает хорошие результаты, как описано выше для 61,25% строк. На данный момент у меня есть 4x .gcda, 4x, gcno и около 20x других файлов .gcov.

Теперь, когда я пытаюсь использовать lcov здесь lcov --directory . -c -o result.info это идет не так.

lcov Результаты:

Capturing coverage data from .
Found gcov version: 4.4.7
Scanning . for .gcda files ...
Found 4 data files in .
Processing ./gtest_main.gcda
geninfo: WARNING: cannot find an entry for foobar.cpp.gcov in .gcno file, skipping file!
geninfo: WARNING: cannot find an entry for *more c++ files*.gcov in .gcno file, skipping file!
Processing ./foobar.gcda
geninfo: WARNING: no data found for /home/asdf/code/proj/foobar.cpp
Processing ./foobar_test.gcda
geninfo: WARNING: no data found for /home/asdf/code/proj/unittest/foobar_test.cpp
Processing ./gtest-all.gcda
Finished .info-file creation```

Просмотр вывода lcov после $ genhtml report.info --output-directory report && firefox report/index.html показывает только около 5 каталогов, которые не содержат никаких файлов foobar *?

Я пробовал несколько комбинаций $ gcov []cpp так же как $ lcov --base-directory [] --directory [] -c -o но безрезультатно. Также пробовал мягкое связывание некоторых исходных файлов, без помощи.

Что нужно изменить в моей настройке или командах? Комментаторы могут предложить лучшее решение в целом.

3

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]