代码覆盖工具(gcov、lcov)的使用

转载至原文:https://www.cnblogs.com/fnlingnzb-learner/p/6943512.html

一、安装

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

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

二、使用

以hello.c为例

 1 #include<stdio.h>
 2 
 3 int main(int argc,char* argv[])
 4 {
 5     if(argc>1)
 6        printf("AAAA\n");
 7     else
 8        printf("BBB\n");
 9     return 0;
10 }

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,就是代码覆盖信息,但看起来并不直观)

 1 [root@localhost gcov2]# cat hello.c.gcov 
 2         -:    0:Source:hello.c
 3         -:    0:Graph:hello.gcno
 4         -:    0:Data:hello.gcda
 5         -:    0:Runs:1
 6         -:    0:Programs:1
 7         -:    1:#include<stdio.h>
 8         -:    2:
 9         1:    3:int main(int argc,char* argv[])
10         -:    4:{
11         1:    5:    if(argc>1)
12     #####:    6:       printf("AAAA\n");
13         -:    7:    else
14         1:    8:       printf("BBB\n");
15         1:    9:    return 0;
16         -:   10:}

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,然后再执行上面的命令。

  1. 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的原理)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值