最近的操作系统升级使我的coverage脚本失败了。
lcov 1.13gcov (GCC) 9.1.1
我的CMake中用于生成coverage数据的部分:

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标志?还是现在就坏了,没有解决方法?或者也许我一直都在做一些奇怪的事情?

最佳答案

我相信GCC 9现在默认情况下以JSON格式输出coverage数据,如change notes中所述。



看起来lcov也有一个开放的issue用于处理这种新格式。

关于c++ - 用gcc9和lcov覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56718554/

10-14 12:43