首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gcc9和lcov的覆盖率

使用gcc9和lcov的覆盖率
EN

Stack Overflow用户
提问于 2019-06-22 19:37:08
回答 1查看 2.5K关注 0票数 2

最近的一次操作系统升级使我的覆盖率脚本惨遭失败。

lcov 1.13

gcov (GCC) 9.1.1

CMake中用于生成覆盖数据的部分:

代码语言:javascript
复制
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

不幸的是,现在失败的是:

代码语言:javascript
复制
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,有许多符号的形式如下:

代码语言:javascript
复制
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上运行得很好。

是否有要发出/ lcov标志的新解决方案/ CMake标志?还是现在它坏了,没有解决办法?或者我一直都在做些奇怪的事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-22 22:58:14

我相信GCC 9现在默认以JSON的形式输出覆盖率数据,就像变更说明中提到的。

gcov工具已经将其中间格式更改为新的JSON格式。

看起来lcov有一个开放的问题来处理这种新格式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56718554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档