代码覆盖率简介:
目录
- 安装
- CMakeLists配置Gcov
- 增加Branches的检测
- 调用
- 补充
安装
Linux + Ubuntu,输入以下语句:
sudo apt-get update // 检查更新
sudo apt-get install lcov // 安装lcov
lcov -v // 查询已安装的版本
CMakeLists配置Gcov
if (UNIX)
OPTION (ENABLE_COVERAGE "Use gcov" ON)
MESSAGE(STATUS ENABLE_COVERAGE = ${ENABLE_COVERAGE})
IF(ENABLE_COVERAGE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
ENDIF()
endif (UNIX)
增加Branches的检测
Gcov默认输出Function和Line Coverage的覆盖率,如果需要增加Branches的检测,需要修改lcov的配置,具体操作如下:
sudo su // 进入root模式,修改文件权限
chmod 755 /etc/lcovrc // 获得写的权限
vim /etc/lcovrc // 打开文件,进行编辑
grep lcov_branch_coverage /etc/lcovrc // 搜索"lcov_branch_coverage",去掉注释,赋值为1
grep genhtml_branch_coverage /etc/lcovrc // 搜索"genhtml_branch_coverage",去掉注释,赋值为1
:wq // 保存修改,退出编辑
调用
编译代码且执行程序后,输入以下语句:
- 统计所有代码的覆盖率情况
lcov --capture --directory. --output-file coverage.info // 生成coverage.info数据文件
genhtml coverage.info --output-directory out // 根据coverage.info生成html结果报告到out文件夹
- 提取部分文件夹中的代码,统计提取部分代码的覆盖率情况
lcov --capture --directory. --output-file coverage.info // 生成coverage.info数据文件
lcov --extract coverage.info '*/src1/*' '*/src2/*' -o finalresult.info // 提取src1和src2文件夹中的代码,注意格式
genhtml -o report finalresult.info // 根据finalresult.info生成html结果报告到report文件夹
- 提取部分文件夹中的代码,统计提取部分代码的覆盖率情况
lcov --capture --directory. --output-file coverage.info // 生成coverage.info数据文件
lcov --extract coverage.info '*/common1/*' '*/common2/*' -o finalresult.info // 提取common1和common2文件夹中的代码,注意格式
genhtml -o report finalresult.info // 根据finalresult.info生成html结果报告到report文件夹
补充
- Gcov生成的.gcno和.gcda文件和.o文件在同一路径下,一般放在编译后的/build/test.dir(test表示project名)里。
- Gcov可以累积统计多次运行可执行文件的结果。