一、安裝
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為例

# 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 -: 0:Source:hello.c -: 0:Graph:hello.gcno -: 0:Data:hello.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include<stdio.h> -: 2: 1: 3:int main(int argc,char* argv[]) -: 4:{ 1: 5: if(argc>1) #####: 6: printf("AAAA\n"); -: 7: else 1: 8: printf("BBB\n"); 1: 9: return 0; -: 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,然后再執行上面的命令。
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的原理)