Как создать отчет о покрытии с помощью gcovr и нескольких каталогов источника / объекта? - PullRequest
3 голосов
/ 10 апреля 2019

Я пытаюсь использовать gcovr 4.1 для генерации отчетов о покрытии для проекта совместно используемой библиотеки в C ++ / Qt при выполнении модульных тестов.У меня не было проблем с инструментарием моего кода, но у меня возникли проблемы при получении gcda-файлов для библиотеки, а также при получении полного отчета даже по модульным тестам, которые дали gcda-файлы.

Мой проектимеет следующую иерархию после запуска make в project-root и выполнения модульных тестов путем вызова x64/release/tests:

project-root/
├─ Makefile
├─ build
|  ├─ library/
|  |  ├─ GeneratedFiles/
|  |  |  └─ <cpp files generated by Qt's moc compiler>
|  |  └─ obj
|  |     └─ <*.o, *.gcno, *.gcda> (gcda files show up after Edit #2)
|  └─ tests/
|     ├─ GeneratedFiles/
|     |  └─ <cpp files generated by Qt's moc compiler>
|     └─ obj
|        └─ <*.o, *.gcno, *.gcda>
├─ library/
|  ├─ Makefile
|  └─ src/
|     ├─ subdir/
|     |  └─ <source files>
|     └─ <other source files>
├─ tests/
|  ├─ Makefile
|  └─ src/
|     ├─ subdir/
|     |  └─ <source files>
|     └─ <other source files>  
└─ x64/  
   └─ release/
      ├─ tests
      └─ library.so

Обратите внимание, что build/library/obj не содержит файлов gcda, в то время как build/tests/obj делает. Всего в последнем каталоге 11 файлов gcda.

Я попытался запустить gcovr из нескольких каталогов с различными фильтрами.Некоторые примеры, которые, по крайней мере, приводят к выводу:

[user@50f886c6bdeb project-root] gcovr

Попытка указать исходные каталоги:

[user@50f886c6bdeb project-root] gcovr --filter library/src/ --filter tests/src/

Указание корня с полными путями:

[user@50f886c6bdeb project-root] gcovr -r /code/project-root/ --filter /code/project-root/library/src/ --filter /code/project-root/tests/src/

Каждыйиз них (наряду с несколькими другими вариантами) получаются идентичные результаты.

  • Я получаю длинный список сообщений «Не удается открыть исходный файл»
  • Он сообщает об охвате файлов сразу в tests/src, но не для tests/src/subdir, хотя я могу проверить, что файлы gcda в подкаталоге содержат данные, изучив их с помощью gcov.

Файлы cpp в build/.../GeneratedFiles получают инструментарий (т.е. имеют соответствующие файлы gcno);однако мне не особо важно, включены ли их данные в отчет.Мне нужно выяснить:

  1. Как получить файлы gcda для генерации для библиотеки при выполнении модульных тестов?
  2. Какую командную строку сделатьЯ использую, чтобы позволить gcovr объединить результаты и источник для этой структуры?

Я ценю любую помощь!

Edit # 1: Добавлены местоположения Makefilesи разъяснил, что такое сборка / запуск двоичного файла.

Edit # 2:
Часть загадки раскрыта. Опечатка в моем файле Qt * .pro предотвращена-fprofile-arcs от включения в флаги компоновщика для библиотеки.
Я нашел помощь в этом вопросе: gcov: создание вывода .gcda из общей библиотеки?
, который привел меня к этому gccпоток справки: поддержка gcov для общей библиотеки
, которая в итоге заставила меня проверить, где компилятор пытался сохранить файлы gcda, запустив:

[user@50f886c6bdeb release]strings library.so | grep gcda

Не было записей, поэтомуЯ дважды проверил настройки сборки для библиотеки и нашел свою ошибку,С этим исправлением файлы gcda создаются для файлов библиотеки, и gcov может создавать с ними отчет - включая файлы в library/src/subdir (что противоречит поведению двоичных тестов).
Однако я все еще вижу всете же сообщения «Не удается открыть исходный файл».Попытка создать подробный HTML-отчет заканчивается неудачей, в результате чего возникает ошибка.

...