使用gcov/lcov或gcovr工具进行代码覆盖率统计时,都需要在编译选项中加入"-fprofile-arcs -ftest-coverage"两个选项,才能生成.gcno和gcda文件。
如果是CMAKE工程,则可以添加编译选项如下:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
1、gcov这是gcc自带的内建工具,不需要额外安装,使用起来比较简单,但是生成的报告可视效果比较差,简单了解一下。
2、lcovLcov是gcov的可视化前端,输出的是html格式的报告,类似下面这样:
ubuntu下需要安装lcov,最简单的方式就是通过apt-get方式安装:
sudo apt-get install lcov
功能比较多,有很多选项可供选择,具体可通过lcov --help查阅,这里记录一下基本操作。
lcov -d 、-c -o all.info # -d表示执行目录,-c表示捕获所有报告,-o表示输出到all.info中lcov -r all.info '/usr/*' 'thirdpart/*' -o coverage.info# -r表示排除哪些文件或路径(--remove),意思就是将初始生成的all.info做一下排除,得到coverage.infolcov -e all.info 'thirdpart/*' -o coverage.info# -e意思就跟上面相反,保留哪些文件(--extract),意思就是将all.info做一下筛选,得到coverage.infogenhtml -o result coverage.info# 最后一步就是将得到的.info文件生成最终的html结果,结果放在result文件夹中。
3、gcovr功能跟lcov很类似,gcovr是python写的,安装我知道的有两种方式,一种还是apt-get方式安装(ubuntu下),另一种使用python的包管理工具pip install安装。
基本操作如下:
gcovr -r 、--html --html-details -o coverage.html
生成的报告打开如下:
4、怎么集成到jenkins CI中?对于lcov,需要额外下载Jenkins插件:HTML Publisher,用来链接生成的报告。具体配置如下:
对于gcovr,需要额外下载Jenkins插件:Cobertura,用来链接生成的报告,且可以可视化构建的结果趋势。若要把gcovr集成到Jenkins,还需要将覆盖率报告转成XML格式,然后由Cobertura自动解析。
>运行gcovr
gcovr -r 、--xml -o build/coverage.xml
>配置Cobertura
>覆盖率结果和趋势
实际使用过程中发现,gcovr的代码覆盖显示存在部分问题,有的代码执行过了,颜色却标的不对,以后再深究!有什么问题可以在评论区留言,知无不言。