栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++代码覆盖率统计:gcov/lcov/gcovr以及集成到jenkins

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++代码覆盖率统计:gcov/lcov/gcovr以及集成到jenkins

使用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. lcov

Lcov是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.info

lcov -e all.info 'thirdpart/*' -o coverage.info
# -e意思就跟上面相反,保留哪些文件(--extract),意思就是将all.info做一下筛选,得到coverage.info

genhtml -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的代码覆盖显示存在部分问题,有的代码执行过了,颜色却标的不对,以后再深究!有什么问题可以在评论区留言,知无不言。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号