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. redis连接池(JedisPool)资源归还及timeout详解

    转载. https://blog.csdn.net/yaomingyang/article/details/79043019 一.连接池资源类详解都在注释上 package redis.v1.clie ...

  2. java-工厂

    class Mouse{ public void sayHi(){}; } class DellMouse extends Mouse { @Override public void sayHi() ...

  3. docker关系图解析

    docker关系图解析 一.docker有5种状态 Dockerfile 文本文件,制作images的配置文件 images image,静态文件 containers container image ...

  4. Mysql】Mysql中CURRENT_TIMESTAMP,CURRENT_DATE,CURRENT_TIME,now(),sysdate()各项值的区别

    CURRENT_TIMESTAMP,CURRENT_DATE,CURRENT_TIME,now(),sysdate()各项值的区别,我们可以通过在终端下,查看结果就能知道: SELECT CURREN ...

  5. elasticsearch安全重启节点

    elasticsearch集群,有时候可能需要修改配置,增加硬盘,扩展内存等操作,需要对节点进行维护升级.但是业务不能停,如果直接kill掉节点,可能导致数据丢失.而且集群会认为该节点挂掉了,就开始转 ...

  6. Scala Spark WordCount

    Scala所需依赖 <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-l ...

  7. Linux学习笔记之tail命令显示最后n行

    tail :输出文件的最后几行. 用于linux查看日志的时候很方便,假如日志文件为:Console.log用法:1. tail Console.log tail # 输出文件最后10行的内容 2. ...

  8. IntelliJ IDEA web项目进行数据库连接时出现java.lang.ClassNotFoundException: com.mysql.jdbc.Driver错误解决办法

    首先看报错信息: 意思是找不到类:  com.mysql.jdbc.Driver.也就是说tomcat找不到MySQL数据库连接要用的jar包! 出现这种错误的原因是: 项目中没有导入这个jar包, ...

  9. java基本结构

    前言 Java文件的运行过程: 1,javac.exe:编译器 2,java.exe:解释器 微软shell下运行实例: C:\Users\Administrator>cd D:\文档\JAVA ...

  10. Android存储及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别

    存储介绍 Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足.一般我们存储内容都会 ...