You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用lcov生成C++代码覆盖率报告找不到.cpp.gcov条目如何解决

问题原因

核心原因是 LCOV 1.13版本与GCC 9系列不兼容。GCC 9之后更新了gcno/gcda覆盖率信息文件的存储格式,新增的字段长度超过了LCOV 1.13预设的解析上限,所以会出现两个警告:

  • Overlong record at end of file! 表示lcov无法正确识别gcc 9生成的gcno文件结构
  • cannot find an entry for main.cpp.gcov in .gcno file, skipping file! 表示因为解析失败,lcov直接跳过了源文件的覆盖率数据采集,最终生成的main.info为空,因此genhtml执行时报找不到有效记录的错误。
解决方案

推荐按优先级选择以下任意一种方案:

方案1:升级LCOV到1.14及以上版本(最稳定)

操作步骤:

  1. 卸载系统自带的旧版本lcov:
sudo apt remove -y lcov
  1. 下载lcov 1.14或更高版本的官方源码包,解压后编译安装:
tar zxf 你下载的lcov源码包文件名
cd 解压后的目录
sudo make install
  1. 验证版本:执行lcov --version确认版本号≥1.14即可。

升级完成后清理原有中间文件重新执行流程即可:

# 清理旧的覆盖率文件
rm -f *.gcda *.gcno main.info
rm -rf report
# 重新走原有流程
g++ -g -O0 --coverage main.cpp -o main
./main
lcov -t "main" -o main.info -c -d . --gcov-tool gcov-9
genhtml -o report main.info

方案2:临时兼容方案(无需升级lcov)

如果暂时无法升级lcov,可在编译时添加-fno-record-gcc-switches参数,让gcc生成兼容旧版本lcov的覆盖率文件:
编译命令修改为:

g++ -g -O0 --coverage -fno-record-gcc-switches main.cpp -o main

后续执行原有运行、采集、生成报告的流程即可。

内容的提问来源于stack exchange,提问作者vamirio-chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:45:03