GCC9 和 LCOV 的覆盖范围
coverage with gcc9 and 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标志?还是现在坏了,没有解决方法?或者也许我一直在做一些奇怪的事情?
我相信GCC 9现在默认将覆盖率数据输出为JSON,如变更说明中所述。
gcov 工具已将其中间格式更改为新的 JSON 格式。
看起来 lcov 在处理这种新格式时也有一个悬而未决的问题。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 尝试通过多个向量访问变量时,向量下标超出范围
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用ios:ate写入到流会覆盖现有文件
- 在基于范围的for循环中使用结构化绑定声明
- 如何计算数据类型的范围,例如int
- GCC9 和 LCOV 的覆盖范围
- 覆盖范围分析一些googletest宏显示在分布在几行上时的覆盖范围不完整 - 原因
- 如何基于每个成员覆盖类范围的__declspec(dllexport)注释?
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- CMAKE的C 覆盖范围设置
- 通过使用全局变量的函数访问在给定范围内被覆盖的变量
- 从覆盖范围报告中删除自动生成的异常代码
- 静态库(.lib)Visual Studio的代码覆盖范围
- char *argv []和int argc c 的全局覆盖范围
- 代码覆盖范围结果:导出到Excel
- 将gcov与子进程和共享库一起使用时没有覆盖范围
- 更短的循环,相同的覆盖范围,为什么我在 Visual Studio 2013 的 c++ 中获得更多的“最后一级缓存未命