Linux下gcovr的使用细节
gcovr的一些使用细节
承接这篇文章,本文讲述gcovr的一些使用细节。
在实际使用过程中,发现gcovr比lcov好用,其基于python,可以跨平台,而且命令简单智能(lcov的一个优势是可以查看内核代码的覆盖率)
一 安装
环境:ubuntu 21.04 (需要先执行命令指定一下python是python3 : sudo apt install python-is-python3
)
有2种方式安装:
-
pip3命令安装,如下,-U可以保证安装最新版,本文写作时最新版是5.0
pip3 install -U gcovr
-
源码安装,可以保证安装最新版,稍微麻烦点
首先去github下载源码包,https://github.com/gcovr/gcovr/releases,也可以使用git去下载,都是一样的。
下载好后解压,然后cd进入源码根目录,最后执行下面的命令进行安装,要求python版本是3.6+python setup.py build # 构建 sudo python setup.py install # 安装
安装过程中需要去下载3个python库:jinja2,lxml和pygments,有可能会下载很慢,这时可以先手动使用pip3去下载,
pip3 install jinja2 -i https://pypi.douban.com/simple/ pip3 install lxml -i https://pypi.douban.com/simple/ pip3 install pygments -i https://pypi.douban.com/simple/
接着修改源码目录下的setup.py,把里面的下载操作注释掉,
最后重新执行安装命令就行了,sudo python setup.py install # 安装
安装完后使用以下命令查看版本,正确输出版本号说明安装成功!
gcovr --version
二 使用细节 ------ 过滤操作
本人在使用过程中,用到最多的是过滤操作,就是指定哪些代码需要检查,哪些不需要检查,使用的语法是正则表达式,使用gcovr --help
查看过滤的帮助信息,如下,
其中,-f
和-e
是在源码里进行过滤,后面三个--gcov-filter
, --gcov-exclude
和--exclude-directories
则是从生成的gcov数据文件里进行过滤,即.gcno和.gcda文件
过滤操作很重要,但是官方教程里没有给例子,网上搜了一圈也没搜到用法,最后自己在gcovr的源码查找,才发现是要使用正则表达式,而且是正规的正则表达式
1. 使用源码名过滤
例如这篇文章中的例子,假设我们想查看目录名字中包含myfunc,源码文件名中不包含myfunc1,且是cpp文件,那么就该这么写,
mkdir -p CoverageGcovr # 如果目录不存在,必须先创建,gcovr不会去创建不存在的目录
gcovr -r ../ -f '../myfunc.+/' -e '.+myfunc1\.cpp' -e '.+\.h' --html --html-details -o CoverageGcovr/index.html
PS: -r
用来指定源码根目录
也可以直接使用-f来指定需要的源码(源码不多的情况下),如下,只需要myfunc2和myfunc3,
gcovr -r ../ -f '.+myfunc[2-3].+' -e '.+\.h' --html --html-details -o CoverageGcovr/index.html
最后html报告如下,
点击myfunc2.cpp进行细节查看,
2. 使用gcov数据名过滤
如果使用gcov数据进行过滤,则这样写,
mkdir -p CoverageGcovr # 如果目录不存在,必须先创建,gcovr不会去创建不存在的目录
gcovr -r ../ --gcov-filter '.+myfunc.+' --gcov-exclude '.+myfunc1.+' --html --html-details -o CoverageGcovr/index.html
同理,也可以直接指定需要的,
gcovr -r ../ --gcov-filter '.+myfunc[2-3].+' --html --html-details -o CoverageGcovr/index.html
--exclude-directories
是排除某些个包含gcov数据的目录,同样使用正则表达式,这里还要把测试文件给删除掉
gcovr -r ../ -e '.+test.cpp' --exclude-directories '.+myfunc1.+' --html --html-details -o CoverageGcovr/index.html
总之,这5个选项根据需要可以任意组合,如果有问题就多尝试…
三 使用细节 ------ 设置html的报告标题
这个比较简单,使用选项--html-title
,
gcovr -r ../ -f '.+myfunc[2-3].+' -e '.+\.h' --html --html-details --html-title 'My Test Report' -o CoverageGcovr/index.html
结果如下,
还有其它一些与html设置有关的选项,如设置每个threshold的颜色,和threshold的比例等(0,75,90),不过一般默认的就可以了
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)