Покрытие gcc9 и lcov

Недавнее обновление ОС привело к краху моего сценария покрытия.

lcov 1.13

gcov (GCC) 9.1.1

Часть моего CMake, которая используется для генерации данных о покрытии:

if ($ENV{COVERAGE})
    message("Setting up for coverage")
    enable_testing()
    include(CodeCoverage)
    setup_target_for_coverage(${PROJECT_NAME}_coverage tests coverage)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  --coverage")
endif ()

Команда lcov, которую я выдал после сборки тестов: lcov --capture --directory build/ --output-file coverage.info

К сожалению, теперь не удается:

Capturing coverage data from build/
Found gcov version: 9.1.1
Scanning build/ for .gcda files ...
geninfo: WARNING: no .gcda files found in build/ - skipping!
Finished .info-file creation

Сообщение об ошибке имеет смысл, потому что нет файлов .gcda — только файлы .gcno. Я не уверен, служат ли они той же цели и / или могут ли они использоваться с lcov.

Я выдал nm some_binary | grep gcov и там много символов в виде:

00000000004b3520 d __gcov_._ZZZN6__pstl10__internal15__pattern_walk2IRKNS_9execution2v115parallel_policyEN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEENS8_IPiSD_EEZSt9transformIS6_SE_SG_ZN12_GLOBAL__N_150ParallelTransformTest_NoDataShouldReturnEmpty_Test8TestBodyEvEUlRKT_E_ENSt9enable_ifIXsrNS3_19is_execution_policyINSt5decayISK_E4typeEEE5valueET1_E4typeEOSK_T0_SY_SU_T2_EUlRS9_RiE_St17integral_constantIbLb0EEEESU_SX_SY_SY_SU_SZ_T3_S13_IbLb1EEENKUlvE_clEvENKUlSE_SE_E_clESE_SE_

Так что я думаю, что CMake по-прежнему правильно пытающийся, чтобы дать мне данные о покрытии.

Он отлично работал на gcc 7, если я правильно помню.

Есть ли новое решение / флаг CMake для выпуска / флаг lcov для выпуска? Или он сломался прямо сейчас и нет обходного пути? Или, может быть, я делал что-то странное все это время?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 231
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что GCC 9 теперь по умолчанию выводит данные о покрытии в формате JSON, как указано в изменить заметки.

The gcov tool has changed its intermediate format to a new JSON format.

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

Кажется так. Любые известные обходные пути? Я не хочу перекомпилировать весь проект под другой версией компилятора только для того, чтобы получить охват.

Leśny Rumcajs 23.06.2019 10:37

Последняя фиксация для ветки master на lcov должна решить эту проблему, так что вы можете попробовать собрать lcov из исходников. Кажется, я не могу найти никаких предположений о том, что это можно настроить в GCC, так что это может быть ваш единственный вариант на данный момент.

Sam Rice 23.06.2019 14:00

Да, запуск lcov из мастера позволяет анализировать промежуточный формат gcov — хотя мне нужно было установить дополнительные пакеты, такие как zlib, или кучу модулей Perl из cpan. Не совсем чистый, но делает свое дело.

Leśny Rumcajs 23.06.2019 23:01

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