Как получить точный отчет о покрытии кода с помощью gcovr для проекта MSYS2 MINGW64 Clang?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как получить точный отчет о покрытии кода с помощью gcovr для проекта MSYS2 MINGW64 Clang?

Сообщение Anonymous »

Я пытаюсь использовать инструмент gcovr, чтобы получить покрытие кода проекта C++, созданного в Windows, с использованием набора инструментов MSYS2 MINGW64 Clang.
Я решил использовать такую ​​настройку, чтобы имитировать работу проекта построен на системе CI.
Проект состоит из тестового исполняемого файла E (он использует фреймворк GoogleTest) и двух статических библиотек. , L1 и L2, имеющие следующие зависимости: L1 -> L2; L1, L2 -> E.
Он собирается с использованием системы CMake.
При сборке для покрытия кода в самом начале всего процесса я добавляю все нацелены на следующие флаги компилятора (

Код: Выделить всё

CMAKE_CXX_FLAGS
): -g --coverage -fPIC -O0 -fno-elide-constructors
Затем я создаю отчет о покрытии кода, используя следующую команду:):): р>

Код: Выделить всё

-- C:/msys64/mingw64/bin/gcovr.exe --html index.html --html-details -r 
 --object-directory= --gcov-executable=llvm-cov gcov --merge-mode-functions=merge-use-line-min --exclude-unreachable-branches --exclude-function-lines --exclude-lines-by-pattern '^\s*\}?\s*$'
Первая проблема, с которой я столкнулся, заключается в том, что по крайней мере для одного исходного файла некоторые функции были найдены в нескольких строках одного и того же файла - для меня это не имеет смысла, поскольку например gcovr сообщил, что одна из таких функций запускается в L183 и L185, тогда как на самом деле она запускается в L185, а L183 содержит закрывающую скобку совершенно другой функции. Я понятия не имею, почему я получил эту ошибку, но мне удалось обойти ее, используя флаг --merge-mode-functions=merge-use-line-min.
Однако , полученный отчет — мусор. В частности, многочисленные пустые строки, а также строки, содержащие только комментарии/закрывающие скобки, помечаются как «не попадающие», что делает вывод бесполезным.
Обратите внимание, что я использовал --exclude-lines-by-pattern '^\s*\}?\s*$', но по каким-то причинам он не отфильтровал упомянутые проблемные строки.
Вот отрывок из созданный отчет:
Изображение

Что мне следует сделать? сделать, чтобы результаты были более точными? Использовать разные флаги компилятора/компоновщика? Другой инструмент покрытия?
Другой набор инструментов — не такое уж осуществимое решение, так как тогда мне пришлось бы постоянно перестраивать весь проект, чтобы переключаться между, например, Clang GCC.
Я пытался добавить флаги компилятора -Xclang -fprofile-instrument=clang ко всем целям сборки, но затем процесс сборки застрял на связывание моего тестового исполняемого файла E (или процесс замедлился, и я предположил, что он устарел; вместо завершения, скажем, за 10-20 секунд, он не завершился даже через несколько минут).

[РЕДАКТИРОВАНИЕ: оно завершилось примерно через 15-20 минут, с длинным списком ошибок «неопределенной ссылки», возникших в библиотеке GoogleTest (libgtest.a) и связанных с элементами. стандартной библиотеки C++, например:

Код: Выделить всё

C:/msys64/mingw64/bin/ld: lib/libgtest.a(gtest-all.cc.obj):C:/msys64/mingw64/include/c++/14.2.0/bits/stl_tree.h:1964: more undefined references to '__profc__ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS5_EPKSt18_Rb_tree_node_baseRKS5_' follow 
]

Подробнее здесь: https://stackoverflow.com/questions/791 ... -clang-pro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить точный отчет о покрытии кода с помощью gcovr для проекта MSYS2 MINGW64 Clang?
    Anonymous » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Единый отчет о покрытии кода Jacoco для многомодульного проекта
    Anonymous » » в форуме Android
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous
  • Как иметь отдельный отчет о покрытии кода Jacoco для мультимодульного проекта
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как иметь отдельный отчет о покрытии кода Jacoco для мультимодульного проекта
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • PHPUnit – один отчет о покрытии из нескольких папок проекта?
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»