покрытие с gcc9 и lcov - PullRequest
1 голос
/ 22 июня 2019

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

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 для выдачи?Или это сломано прямо сейчас и нет обходного пути?Или, может быть, я все время делал что-то странное?

1 Ответ

1 голос
/ 23 июня 2019

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

Средство gcov изменило свой промежуточный формат на новый JSONформат.

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

...