首先启用gcov需添加-fprofile-arcs、-ftest-coverage、-g和-O0编译选项,运行测试生成.gcda文件;接着用gcov命令生成文本报告,或使用lcov收集数据并用genhtml生成HTML可视化报告,绿色为已覆盖,红色为未覆盖;建议将流程集成到Makefile或CI中,通过make coverage一键执行,便于持续跟踪测试覆盖率,提升TDD效率。

在C++测试驱动开发中,代码覆盖率是衡量测试完整性的关键指标。gcov 是 GCC 自带的代码覆盖率分析工具,配合编译器选项和 lcov 等前端工具,可以生成直观的 HTML 报告,帮助开发者识别未被测试覆盖的代码路径。
要使用 gcov,必须在编译时添加特定的调试和插桩选项,使编译器生成用于覆盖率分析的辅助文件。
编译 C++ 代码时,加入以下标志:
g++ -fprofile-arcs -ftest-coverage -g -O0 -c src/mycode.cpp -o build/mycode.o g++ -fprofile-arcs -ftest-coverage build/mycode.o test/test_mycode.cpp -o build/test_runner
编译完成后,执行测试程序。运行过程中,gcov 会自动生成 .gcda 文件,记录每行代码的执行次数。
立即学习“C++免费学习笔记(深入)”;
运行测试:./build/test_runner
执行后,在目标目录中会出现对应的 .gcda 文件,与 .o 文件同名。此时可使用 gcov 命令生成单个源文件的文本覆盖率报告:
gcov build/mycode.cpp
该命令会输出 mycode.cpp.gcov 文件,其中每一行前的数字表示执行次数,##### 表示未被执行。
手动查看 .gcov 文件效率低,推荐使用 lcov 工具收集所有数据并生成图形化报告。
安装 lcov(Ubuntu/Debian):
sudo apt-get install lcov
常用 lcov 命令流程:
完成后,打开 coverage_report/index.html 即可在浏览器中查看带颜色标记的源码覆盖率,绿色为已覆盖,红色为未覆盖。
为了在日常开发中持续关注覆盖率,可将 gcov 流程写入 Makefile 或 CI 脚本。
例如 Makefile 片段:
coverage:
g++ -fprofile-arcs -ftest-coverage -g -O0 -c src/*.cpp -o build/
g++ -fprofile-arcs -ftest-coverage build/*.o test/*.cpp -o build/test
./build/test
lcov --capture --directory . --output-file coverage.info
genhtml coverage.info --output-directory coverage_report
@echo "Coverage report generated in coverage_report/index.html"
这样只需运行 make coverage 即可一键生成报告。
基本上就这些。只要编译配置正确,运行测试后用 lcov 处理数据,就能清晰看到哪些代码被测到、哪些遗漏了。对推动测试驱动开发非常有帮助。不复杂但容易忽略细节,比如忘记关优化或没加 -g,会导致无法生成有效数据。
以上就是c++++如何使用gcov生成代码覆盖率报告_c++测试驱动开发工具的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号