C/C++代码覆盖率统计工具:gcov&&gcovr安装和简单使用

gcov安装

Linux ver:

gcov是gcc的自带功效 属于GNU 不用稀奇安装

Windows ver:

在windows下安装可以使用gcov的gcc 之前试过mingw和Cygwin64 Terminal,在后续可视化的历程中效果不是很理想,经由多方测试发现Strawberry Perl的GCC可以很好的知足后续可视化的需求。至于为什么mingw的后续可视化为什么不行 似乎和llvm的仿真有关系……

在安装完成Perl以后就就可以在windows下使用gcov了。

gcovr安装

Linux下与windows下gcovr的安装大同小异 都是通过Python的pip安装 凭据差别的Python版本pip会选择与此Python版本相适应的gcovr举行安装。

若是你用的操作系统还没有Python请自行安装。这里使用Python3.8版本为栗子举行说明安装历程。

在适才安装的Strawberry Perl中已经包罗了pip 以是win用户可以忽略安装pip的步骤。

若是你的电脑没有pip也请安装一个pip pip的安装方式异常简朴。可以在浏览器中将下列链接右键另存后安装:

https://bootstrap.pypa.io/get-pip.py

也可以在Linux中使用curl下令举行下载

下载完成后执行语句

python get-pip.py

  就可以举行安装了 若是报错可能是权限问题,添加语句sudo后执行或win下使用管理员权限。

安装好pip后。

执行语句

pip install gcovr

  安装gcovr。安装的部门大功告成。

gcov与gcovr的使用

 

Linux和win下若何使用gcov与gcovr呢?我们以假设要编译example.cpp文件为例:

example.cpp源代码如下:实在并不局限于这个测试样例,完全自己可以凭据需求写一个具有多函数多分枝跳转语句以及可以输入多种测试数据的测试样例。

 1 // example.cpp
 2 
 3 int foo(int param)
 4 {
 5     if (param)
 6     {
 7         return 1;
 8     }
 9     else
10     {
11         return 0;
12     }
13 }
14 
15 int main(int argc, char* argv[])
16 {
17     foo(0);
18 
19     return 0;
20 }

 

软件设计模式之单例模式

在终端或cmd下令行里输入下句:

g++ -fprofile-arcs -ftest-coverage -fPIC -O0 example.cpp -o program

  

就可以天生目的可执行文件program或program.exe。请注意,我们在编译该程序时没有举行优化,由于优化可能会合并代码行,否则会更改程序中的执行流程。此外,我们使用-fprofile-arcs -ftest-coverage -fPIC编译器选项举行编译,这些选项添加了逻辑以天生可以由gcov下令处置的输出文件。

接下来我们运行程序举行测试 ,若是没有参数就直接运行就行了。

./program

  windows下执行

program.exe

  就示意对程序的一次执行测试。

 

天生文件example1.gcno和example1.gcda。这些文件由gcov处置,以天生代码笼罩率统计信息。gcovr下令挪用gcov并以种种花样汇总这些代码笼罩率统计信息。

好比最基本的简朴显示测试效果:

gcovr -r .

  以我这里的代码为例,就会打印如下的效果:

------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
example.cpp                                    7       6    85%   7
------------------------------------------------------------------------------
TOTAL                                          7       6    85%
------------------------------------------------------------------------------

  此输出的每一行都包罗给定源文件的摘要,其中包罗已检测的行数,已执行的行数,已执行的行数百分比以及未执行的行号的摘要。为了提高清晰度,gcovr使用努力的方式将未笼罩的行分组,并将由“非代码”行(空缺,自力大括号和单行注释)分开的未笼罩行合并到一个区域中。效果,“缺少”列表中列出的行数可能大于“行”和“执行”列的差。-r选项指定要剖析的文件的根目录。这使gcovr可以天生更简朴的讲述(没有绝对路径名),而且可以从剖析中清扫系统头文件。请注意,gcov按行累积统计信息。因此,它最好与一种编程气概一起事情,该编程气概每行仅放置一条语句。

这只是最基础的要求 进一步我们想要获得更为详细的代码剖析讲述,使用如下下令天生关于整个项目的测试效果。(由于测试用例只有一个CPP文件以是效果只有一个文件,后续会用庞大的项目进一步举例说明)

gcovr -r . --html --html-details -o example-html-details.html

  这样就可以凭据之前测试的效果天生一个可视化的html花样的测试讲述了。如下图所示。

C/C++代码覆盖率统计工具:gcov&&gcovr安装和简单使用

 

 请注意,–html-details选项只能与-o(–output)选项一起使用。例如,若是–output选项指定输出文件coverage.html,则为每个文件天生的网页将具有coverage。<filename> .html形式的名称。

至此我们代码笼罩率测试的效果已经算是到达预期效果了,然则gcovr的功效绝不仅限于此,这只是个最先,以后的博客会进一步剖析gcov的事情原理和gcovr的更壮大的使用方式,并会举出更庞大的样例来加以说明。同样可以自己学习研读官网给出的相关说明来领会gcovr的壮大功效。

参考文献:

pip的安装:https://pip.pypa.io/en/stable/installing/

gcovr的使用官方说明书:https://gcovr.com/en/stable/index.html

Strawberry Perl的下载地址:http://strawberryperl.com/

原创文章,作者:admin,如若转载,请注明出处:https://www.2lxm.com/archives/21211.html