一、安装

gcov:是随gcc一起发布的,并不需要独立安装;
lcov:其他博客说是随ltp发布的,结果下载下ltp之后编译了10多分钟,最后也没见lcov,最后到sourceforge下载了lcov单独的代码:

wget http://ncu.dl.sourceforge.net/project/ltp/Coverage Analysis/LCOV-1.12/lcov-1.12.tar.gz
tar -zxvf lcov-1.12.tar.gz
make
make install

二、使用

以hello.c为例

#include<stdio.h>

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

# gcc -fprofile-arcs -ftest-coverage hello.c -o hello       (编译时候加两个参数:-fprofile-arcs -ftest-coverage, 此时会生成:hello.gcno)

# ./hello                                                                        (此时会生成: hello.gcda, hello.gcno和hello.gcda是gcov引用的关键文件)

# gcov hello.c                                                                 (gcov根据上面的文件生成了:hello.c.gcov,就是代码覆盖信息,但看起来并不直观)

[root@localhost gcov2]# cat hello.c.gcov
-: :Source:hello.c
-: :Graph:hello.gcno
-: :Data:hello.gcda
-: :Runs:
-: :Programs:
-: :#include<stdio.h>
-: :
: :int main(int argc,char* argv[])
-: :{
: : if(argc>)
#####: : printf("AAAA\n");
-: : else
: : printf("BBB\n");
: : return ;
-: :}

# 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.c.gcov.html的信息,着色过的代码,看起来方便多了。

三、遇到的问题及解决方案

1.Can't locate Digest/MD5.pm

错误信息:

[root@bogon gcov]# lcov -d . -t 'Hello test' -o 'hello_test.info' -b . -c
Capturing coverage data from .
Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/geninfo line 57.
BEGIN failed--compilation aborted at /usr/bin/geninfo line 57.

解决方法

perl -MCPAN -e 'install Digest::Perl::MD5'

如果还不行,那就:

perl -MCPAN -e 'install Digest::MD5'

如果报少CPAN的那就先yum install perl-CPAN,然后再执行上面的命令。

2. geninfo: ERROR

错误信息:

Scanning . for .gcda files ...
Found 1 data files in .
Processing hello.gcda
geninfo: ERROR: /home/test/gcov/hello.gcno: reached unexpected end of file

解决方法:

把lcov-1.9及以下的版本换成lcov-1.9以上的版本。本文用的是lcov-1.12

四、参考地址:

http://blog.csdn.net/jiayanhui2877/article/details/8727193

http://blog.csdn.net/21cnbao/article/details/40268617

http://stackoverflow.com/questions/4844188/c-using-gcov-and-lcov-problem

http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html

http://blog.csdn.net/maray/article/details/40401577   (此文说明了gcov的原理)

代码覆盖工具(gcov、lcov)的使用的更多相关文章

  1. C/C++代码覆盖工具gcov与lcov入门

    C/C++代码覆盖工具gcov与lcov入门 gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具.下面介绍一下如何利用gcov来收集代码覆盖信息.想要用gcov收集代码覆盖信息,需要在g ...

  2. GCOV&LCOV&GCOVR入门

    索引 一.概述 二.关于gcov的安装 三.代码覆盖率测试(以GCOV为例) 1.编译源代码 2.运行可执行程序 3.通过gcov指令生成代码覆盖率报告 四.生成更全面.直观的代码覆盖率报告 1.LC ...

  3. C/C++代码覆盖率工具gcov、lcov

    gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具.下面介绍一下如何利用gcov来收集代码覆盖信息. 想要用gcov收集代码覆盖信息,需要在gcc编译代码的时候加上这2个选项 “-fpr ...

  4. 测者的测试技术手册:自动化单元工具EvoSuie的代码覆盖报告

    EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...

  5. 【转】gcov lcov 覆盖c/c++项目入门

    原文: http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html ------------------------------ ...

  6. 覆盖率测试工具gcov的前端工具_LCOV

    http://my.oschina.net/alphajay/blog/33725 1.Gcov是进行代码运行的覆盖率统计的工具,它随着gcc的发布一起发布的,它的使用也很简单,需要在编译和链接的时候 ...

  7. 覆盖率測试工具gcov的前端工具_LCOV_简单介绍

    1.Gcov是进行代码运行的覆盖率统计的工具.它随着gcc的公布一起公布的,它的使用也非常easy,须要在编译和链接的时候加上-fprofile-arcs -ftest-coverage生成二进制文件 ...

  8. GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov

    gprof是GNU组织下的一个比较有用的性能测试功能: 主要功能:   找出应用程序中消耗CPU时间最多的函数: 产生程序运行时的函数调用关系.调用次数 基本原理:   首先用户要使用gprof工具, ...

  9. Android 代码检查工具SonarQube

    http://blog.csdn.net/rain_butterfly/article/details/42170601 代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一 ...

随机推荐

  1. UnitOfWork以及其在ABP中的应用

    Unit Of Work(UoW)模式在企业应用架构中被广泛使用,它能够将Domain Model中对象状态的变化收集起来,并在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据 ...

  2. jQuery实现页面内锚点平滑跳转

    平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以 ...

  3. ember.js里的实用方法

    一款基于jQuery的插件,以下是关于数组的一些方法 var arr = ['Wang', 'Jason', '444128852@qq.com', 'i2cao.xyz', 'ubuntuvim.x ...

  4. 原生JS:全局属性、全局方法详解

    全局属性.全局方法 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.html 首先普及几个我总结的非常实用又很基础的知识:(呵呵,仅 ...

  5. 屌丝giser成长记-研一篇(上)

    2011年本科毕业之后,我选择了保研GIS研究生,继续了我的GIS研究生涯,读研的童鞋们注意了,读研选择什么样的导师很重要,因为不同的导师有不同的人脉,从浅一点的来说,导师手头的开发项目多的话,你自己 ...

  6. Android Studio安装配置、环境搭建详细步骤及基本使用

    前言 Android Studio的安装配置及使用篇终于来啦~ 废话不多说,以下针对JDK正确安装(及其环境变量配置完毕,即Java开发环境下).Android Studio的安装,配置,以及创建工程 ...

  7. Linux安全基础:sed命令的使用

    sed 是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  8. 安卓开发之activity详解(sumzom)

    app中,一个activity通常是指的一个单独的屏幕,相当于网站里面的一个网页,它是对用户可见的,它上面可以显示一些控件,并且可以监听处理用户的时间做出响应. 那么activity之间如何进行通信呢 ...

  9. Android 高级面试题及答案

    一 性能优化 1.如何对 Android 应用进行性能分析 android 性能主要之响应速度 和UI刷新速度. 可以参考博客:Android系统性能调优工具介绍 首先从函数的耗时来说,有一个工具Tr ...

  10. Jsoup解析html终于成功了!!!

    package com.eric.pickupjoke.activity; import java.io.IOException; import java.io.InputStream; import ...