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源代码如下:其实并不局限于这个测试样例,完全自己可以根据需求写一个具有多函数多分枝跳转语句以及可以输入多种测试数据的测试样例。

  // example.cpp

  int foo(int param)
{
if (param)
{
return ;
}
else
{
return ;
}
} int main(int argc, char* argv[])
{
foo(); return ;
}

在终端或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格式的测试报告了。如下图所示。

请注意,--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/

C/C++代码覆盖率统计工具:gcov&&gcovr安装和简单使用的更多相关文章

  1. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  2. oracle存储过程代码覆盖率统计工具

    目前针对于高级语言如C++,JAVA,C#等工程都有相关的代码覆盖率统计工具,但是对于oracle存储过程或者数据库sql等方面的项目,代码覆盖率统计和扫描工具相对较少. 因此针对这种情况,设计了代码 ...

  3. Linux 性能测试工具 sysbench 的安装与简单使用

    文章目录 Linux 性能测试工具 sysbench 的安装与简单使用        一 背景        二 实验环境            2.1 操作系统            2.2 其他配 ...

  4. Python 测试代码覆盖率统计工具 coverage.py

    安装 您可以通常的方式安装coverage.py.最简单的方法是使用pip: $ pip install coverage 要安装预发布版本,您需要指定--pre: $ pip install --p ...

  5. 版本控制工具svn的安装与简单使用

    版本控制工具多用于多人协作开发项目中,这不同于个人开发项目,想把自己代码怎样放置都可以,而且删除了代码很难查找. 版本控制工具类似于个人处理钱的过程,放于自己口袋管理类似于个人开发情形,如果自己钱丢了 ...

  6. 漏洞扫描工具Nessu的安装和简单使用

    一.软件介绍Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Ness ...

  7. centos下性能分析工具perf的安装和简单使用

    1.安装: cat /etc/redhat-releaseCentOS release 6.6 (Final) sudo yum install perf 2.

  8. 内存检测工具valgrind的安装和简单使用

    1. 安装 .tar.bz2 cd valgrind- sudo ./configure sudo make sudo make install 2. 简单使用 #include <stdio. ...

  9. html正文提取工具goose的安装及简单使用Demo

    1.git clone https://github.com/grangier/python-goose.git 2.cd python-goose 3.sudo pip install -r req ...

随机推荐

  1. 【python-opencv】读取、显示、写入图像

    1.读取图像 import cv2 image=cv2.imread("dog2.jpg",1) 说明: 第二个参数是一个标志,它指定了读取图像的方式. cv.IMREAD_COL ...

  2. k8s学习-pod生命周期

    4.2.pod生命周期 创建一个pod的时候过程如下: 1.容器环境初始化: 2.pause执行网络.容器卷等初始化工作: 3.所有的InitC按顺序执行,每个InitC执行完后才能执行下一个,且必须 ...

  3. 本地配置gitee

    一 下载工具 Git-2.62.0-64-bit.exe 以上工具版本号不需要一样,安装完前两个后重新启动系统,再安装第3个. 二 码云网站注册 https://gitee.com/ 使用邮箱注册 注 ...

  4. make & make install(make altinstall) 因动态库gcc版本问题

    cc1: error: unrecognized command line option “-flot” 解决方式是:找到 configure之后的Makefile, 删除 -flot 原因是gcc ...

  5. 【JMeter_03】JMeter GUI操作界面介绍

    JMeter主界面主要分为 标题栏.菜单栏.工具栏.测试计划树形目录.内容展示区 标题栏:主要展示JMeter的程序版本.当前脚本的名称.脚本的储存路径 菜单栏:程序基本上所有功能的所属分类目录,基本 ...

  6. DOCLever环境搭建

    简介 DOClever是一个可视化免费开源的接口管理工具 ,可以分析接口结构,校验接口正确性, 围绕接口定义文档,通过一系列自动化工具提升我们的协作效率. 环境搭建 准备: node: 官方下载:ht ...

  7. 一文梳理JS事件

    JavaScript与HTML的交互是通过事件进行的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间. 事件流 事件捕获 事件冒泡 事件处理程序 事件委托 1. 事件流 如果单机页面上的某个按钮, ...

  8. 浅谈HTTPS和HTTP

    1.HTTP和HTTPS的基本概念 HTTP:超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务端请求和应答的标准,用于WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览 ...

  9. cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if

    cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if remove_copy()//在复制过程中删除一些数据remove_copy_if() 删除性算法: ...

  10. Java前端面试题总结

    Java前端面试题总结 简单说一下HTML,CSS,javaScript在网页开发中的定位? HTML:超文本标记语言,定义网页的结构 CSS:层叠样式表,用来美化页面 JavaScript:主要用来 ...