GCOV是随GCC一起发布的用于代码覆盖率统计的工具,一般配合其图形化工具LCOV一起使用。

一、安装

GCOV不需要单独安装,LCOV下载后执行sudo make install即可完成安装。

二、使用

下面以针对hello.c文件的覆盖率统计为例,说明使用方法。

#include<stdio.h>

int main(int argc,char* argv[])
{
if(argc>)
printf("if\n");
else
printf("else\n");
return ;
}

编译:

        # gcc -fprofile-arcs -ftest-coverage hello.c -o hello       (编译完成后,会生成:hello.gcno,由-ftest-coverage产生,它包含了重建基本块图和相应的块的源码的行号的信息)

运行:

        # ./hello      (这一步会生成 hello.gcda, 由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息)

生成代码覆盖信息:

        # gcov hello.c       (这一步生成hello.c.gcov,就是代码覆盖信息,hello.c.gcov 文件中包含了代码覆盖的统计数据,数字代表了每行代码被执行的次数及行号)

到这一步,就可以打开hello.c.gcov查看代码覆盖率,但是不够直观,因此需要借助LCOV实现代码覆盖率统计数据的图形化显示。

生成LCOV可读的文件:

       # lcov -d . -t 'Hello test' -o 'hello_test.info' -b . -c          (我们借助lcov对hello.c.gcov进行改造,可以看见生成了hello_test.info)

生成图形化展示结果:

       # genhtml -o result hello_test.info                                  (生成了result文件夹,借助web服务器,我们就可以很直观的看到结果了)

用浏览器打开index.html即可看到直观的统计数据。

三、遇到的问题

执行完./hello,发现并没有在当前目录生成gcda文件,进一步执行gcov hello.c可见如下错误:

hello.gcda:无法打开数据文件,假定未被执行过

3.gcno:cannot open notes file

File ‘Hello.c’

没有可执行行

Removing ‘hello.c.gcov

生成上述错误的原因是所使用机器以前有人在bash_profile中对GCOV进行了配置,指定生成gcda文件到其它的路径了。解决的方法很简单,只要设一下GCOV_PREFIX和GCOV_PREFIX_STRIP这两个环境变量就可以了。GCOV_PREFIX制定生成数据文件的前缀,GCOV_PREFIX_STRIP表示需要在原来的路径上去掉多少层目录,通过指定这两个变量的值把数据文件生成到我们想要的地方

export GCOV_PREFIX=”/home/dce/work/test/”
export GCOV_PREFIX_STRIP=5

使用GCOV进行代码覆盖率统计的更多相关文章

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

    gcov安装 Linux ver: gcov是gcc的自带功能 属于GNU 不用特别安装 Windows ver: 在windows下安装可以使用gcov的gcc 之前试过mingw和Cygwin64 ...

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

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

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

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

  4. iOS自动化探索(十)代码覆盖率统计

    iOS APP代码覆盖率统计 今年Q3季度领导给加了个任务要做前后端代码覆盖率统计, 鉴于对iOS代码代码比较熟就选择先从iOS端入手,折腾一整天后终于初步把流程跑通了记录如下 覆盖率监测的原理 Xc ...

  5. Android自动化测试探索(五)代码覆盖率统计

    Android 代码覆盖率统计 本周开始准备统计Android自动化用例的代码覆盖率,将最终使用的方法记录下来. 覆盖率监测的原理 覆盖率监测的原理跟iOS上的原理差不多,大致的思路参考下吧, iOS ...

  6. Android自动化测试探索(七)代码覆盖率统计

    之前在 https://www.cnblogs.com/zhouxihi/p/11453738.html 这篇写了一种统计Android覆盖率的方式 但是对于一些比较复杂或者代码结构不够规范的项目,有 ...

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

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

  8. python代码覆盖率统计-coverage

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

  9. 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)

    Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...

随机推荐

  1. [转帖]从0开始的高并发(一)--- Zookeeper的基础概念

    从0开始的高并发(一)--- Zookeeper的基础概念 https://juejin.im/post/5d0bd358e51d45105e0212db 前言 前面几篇以spring作为主题也是有些 ...

  2. JVM中内存的设置和分配(最大内存,总内存,剩余内存的区别)

    1.设置分配的内存大小 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 说明后面是VM的参数,所以后面的 ...

  3. python学习之利用socketserver的文件传输

    使用socketserver进行多用户的文件传输 服务端 class FtpServer(socketserver.BaseRequestHandler): # 继承socketserver.Base ...

  4. Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  5. custom drawer

    import 'package:flutter/material.dart'; main() => runApp(MaterialApp( home: HomePage(), )); class ...

  6. IDEA中Tomcat热部署不生效问题解决办法

    IDEA中Tomcat热部署不生效问题解决办法 1.设置完热部署后 2.一定要在Debug模式下运行不要点RUN!!!!!!!!!!!!!!!!!

  7. 使用MUI框架实现JQ购物车增减

    // 购物车数量减少$('.reduce').click(function () { addMinus(this,0)}); // 购物车数量增加$('.increase').click(functi ...

  8. Java框架之MyBatis框架(二)

    Mybatis框架是相对于优化dao层的框架,其有效的减少了频繁的连接数据库(在配置文件xml中进行配置),将sql语句与java代码进行分离(写在XXXXmapper.xml文件中,一个表对应一个x ...

  9. JAVA基础之JavaEE与MVC

    所谓的架构.模式都是方便开发和查看的,分工明确的,理解每层的具体的意义! 一.JavaEE: 1.Java EE,Java 平台企业版(Java Platform Enterprise Edition ...

  10. 激活windows去掉右下角水印

     激活windows去掉右下角水印 //需要隔一段时间执行一次 // 卸载已有的激活产品slmgr.vbs /upk // 重新按照激活产品slmgr /ipk NPPR9-FWDCX-D2C8J-H ...