讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么使用gcov和lcov生成代码覆盖率报告_C++测试与gcov/lcov使用方法

酷婷吖_6316

酷婷吖_6316

发布时间:2025-11-16 18:08:02

|

1082人浏览过

|

来源于php中文网

原创

使用gcov和lcov可生成C++代码覆盖率报告。1. 安装工具:Ubuntu/Debian用apt-get,CentOS/RHEL用yum,macOS用brew安装gcc和lcov。2. 编译时添加-fprofile-arcs、-ftest-coverage、-O0和-g选项以生成.gcno文件。3. 运行测试程序生成.gcda运行时数据文件。4. 用lcov --capture收集数据,--remove过滤系统头文件,genhtml生成HTML报告。5. 注意编译链接均需覆盖率选项,禁用高阶优化,每次重新编译后需重跑测试。最终通过浏览器查看覆盖情况,绿色为已覆盖,红色为未执行,有效识别测试盲区。

c++怎么使用gcov和lcov生成代码覆盖率报告_c++测试与gcov/lcov使用方法

使用 gcov 和 lcov 生成 C++ 代码覆盖率报告,是进行单元测试质量评估的重要手段。整个流程包括编译时加入覆盖率支持、运行测试程序、收集数据并生成可视化报告。以下是完整的使用方法。

1. 安装 gcov 与 lcov 工具

在大多数 Linux 发行版中,gcc 自带 gcov,lcov 需要单独安装:

Ubuntu/Debian:

sudo apt-get install gcov gcc lcov

CentOS/RHEL:

sudo yum install gcov gcc lcov

macOS 用户可通过 Homebrew 安装 gcc(含 gcov)和 lcov:

立即学习“C++免费学习笔记(深入)”;

brew install gcc lcov

2. 编写测试代码并启用覆盖率编译选项

为了让 gcov 能收集数据,编译时必须添加特定的编译和链接选项。

假设有一个简单的 C++ 文件 calc.cpp 和对应的测试文件 test_calc.cpp:

// calc.cpp
int add(int a, int b) {
    return a + b;
}
<p>int sub(int a, int b) {
if (a > b) {
return a - b;
}
return b - a;
}</p>

使用如下 g++ 命令进行编译:

g++ -c calc.cpp test_calc.cpp -fprofile-arcs -ftest-coverage -O0 -g
g++ calc.o test_calc.o -fprofile-arcs -ftest-coverage -lgtest -lgtest_main -lpthread -o test_runner

关键编译选项说明:

Wechat Article Html
Wechat Article Html

将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。

下载
  • -fprofile-arcs:启用执行路径记录
  • -ftest-coverage:生成 .gcno 文件,供 gcov 使用
  • -O0:关闭优化,避免代码被内联或删除影响覆盖率准确性
  • -g:添加调试信息

3. 运行测试程序生成覆盖率数据

执行测试可执行文件后,会生成 .gcda 文件(运行时覆盖率数据):
./test_runner

执行完成后,当前目录会出现:

  • calc.gcno:编译时生成,描述代码结构
  • calc.gcda:运行后生成,记录每行执行次数
  • 如果测试多个文件,每个 .cpp 都会有对应 .gcno 和 .gcda

4. 使用 lcov 收集数据并生成 HTML 报告

lcov 是对 gcov 的封装,能更方便地处理多文件并生成网页报告。

步骤如下:

# 清空已有数据
lcov --directory . --zerocounters
<h1>捕获覆盖率数据(包含所有源文件)</h1><p>lcov --capture --directory . --output-file coverage.info</p><h1>可选:过滤掉系统头文件和外部代码</h1><p>lcov --remove coverage.info '/usr/<em>' 'gtest/</em>' --output-file coverage_filtered.info</p>

生成 HTML 可视化报告:

genhtml coverage_filtered.info --output-directory ./coverage_report

完成后打开报告:

xdg-open ./coverage_report/index.html

浏览器将显示函数、行、分支的覆盖率统计,绿色表示已覆盖,红色表示未执行。

5. 常见问题与注意事项

  • 确保编译和链接都加上 -fprofile-arcs -ftest-coverage
  • 不要使用 -DNDEBUG 或高优化等级(如 -O2),会影响结果准确性
  • 每个重新编译后需重新运行测试以生成新的 .gcda
  • 跨目录项目建议指定正确的源码路径给 lcov
  • CI 中可结合脚本自动执行并上传报告

基本上就这些。只要编译正确、测试运行完整,gcov + lcov 就能清晰展示 C++ 项目的实际覆盖情况,帮助发现测试盲区。不复杂但容易忽略细节。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

5124

2025.05.09

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

4330

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

3653

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2893

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

7150

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

6782

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3893

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

3385

2023.07.20

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn