使用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及以上版本(最稳定)
操作步骤:
- 卸载系统自带的旧版本lcov:
sudo apt remove -y lcov
- 下载lcov 1.14或更高版本的官方源码包,解压后编译安装:
tar zxf 你下载的lcov源码包文件名 cd 解压后的目录 sudo make install
- 验证版本:执行
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
相关产品推荐
相关产品推荐

