一、安装

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. 3、ASP.NET MVC入门到精通——Entity Framework增删改查

    这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"( ...

  2. java中 try return finally return

    finally块里面的代码一般都是会执行的,除非执行 System.exit(int),停止虚拟机,断电. 1.若try代码块里面有return ,假设要return 的值 是A,A为基本类型或者被f ...

  3. 使用PHPMailer发送邮件

    如果要使用php发送邮件,则可以使用PHP 内置的mail() 函数,但是mail()函数需要有服务器支持 必须有自己的邮件服务器,如果使用stmp服务来发送邮件的话相当于代替别人发送,而不是从自己服 ...

  4. jQuery静态方法noConflict的使用和源码分析

    所谓静态方法是jQuery本身得公共方法,并不需要通过实例化来调用,一般也称为工具方法,下面先来列绝下jQuery.noConflict方法的用法: noConflict() 方法让渡变量 $ 的 j ...

  5. 基于git diff进行的eslint代码检测

    缘起 在项目中, 通常都会使用代码检测工具来规范团队的代码风格, 比如eslint.随着代码的不断增加, eslint进行代码检测的时间也越来越久.每次检测的时候, 需要检测的文件和实际检测的文件极度 ...

  6. iOS NSArray数组过滤

    需求:在一个数组里面,将在这个数组中的并且在另一个数组里面的元素过滤掉. 即:在一个数组dataArray里面,将在dataArray数组中的并且在filteredArray数组里面的元素过滤掉. / ...

  7. SharePoint 2013 CSOM creat post in NewsFeed Access Denied

    现象 在用CSOM创建新闻源时候,报错:无访问权限 解决办法 value="true" 改为 value="false" <appSettings> ...

  8. Android studio 使用Gradle发布Android开源项目到JCenter 总结

    1.注册账号 先到https://bintray.com注册一个账号.  这个网站支持 github 账户直接登录的 2.获取  bintray.user  和 bintray.apikey      ...

  9. iOS所有常见证书,appID,Provisioning Profiles配置说明及制作图文教程

    转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/9219333 概述: 苹果的证书繁锁复杂,制作管理相 ...

  10. 初学HTML 表单交互标签

    表单标签在网站中主要负责的是进行与用户间的交互, 如果没有了交互, 那么网站就只是一个展示, 会死气沉沉的. <form>表单标签 <form>表单标签可以把浏览者(也就是我们 ...