C++ Code Coverage
简介
本文档介绍了如何在 C++ 项目中生成代码覆盖率报告。我们将使用 lcov 和 gcovr 工具来生成 HTML 格式的覆盖率报告。
示例项目
以下是一个简单的 C++ 项目示例,展示了如何配置和生成代码覆盖率报告。
main.cpp
1 | cpp |
CMakeLists.txt
1 | cmake_minimum_required(VERSION 3.10) |
生成代码覆盖率报告
基本流程
- CMake 添加编译选项:在 CMakeLists.txt 中启用代码覆盖率选项。
- 编译和运行程序:生成可执行文件并运行,生成
.gcda和.gcno文件。- 示例文件路径:
./build/CMakeFiles/simple_cpp.dir/main.cpp.gcno
- 示例文件路径:
- 使用 lcov 生成 HTML 报告:
- 执行命令:
lcov --capture --directory . --output-file coverage.info - 生成 HTML:
genhtml coverage.info --output-directory out
- 执行命令:
注意:
- 生成的
.gcda和.gcno文件不在当前路径。gcov解析 C++ 文件时会去掉.cpp后缀。
使用 llvm-gcov 替代 gcov
在步骤 3 中,可以使用 llvm-gcov 替代 gcov:
- 命令:
lcov -c -d . --gcov-tool *llvm-gcov* -o coverage.info

尝试使用 gcovr
gcovr 是一个 Python 封装的前端工具,比 lcov 更轻量。lcov 报告文件更详细,包含被调用的头文件。
- 运行
supa project时遇到错误,原因是使用了错误的gcov版本,需要使用llvm-gcov。 - 命令:
gcovr -r .. --html --html-details -o gcovr_report2/coverage.html --gcov-ignore-errors

部署指南
目标
- 本地能够只运行某(几)个用例,查看相应源码的覆盖率。
- 基于
supa项目构建相同的流程。
操作步骤
- 编译时打开覆盖率开关。
- 运行目标程序,生成
.gcda和.gcno文件。 - 运行脚本
gen_cov_report.sh,生成 HTML 报告。
通过以上步骤,您可以轻松地在 C++ 项目中生成代码覆盖率报告,并进行分析和优化。