C/C++代码覆盖率工具:gcov和lcov的使用入门

转载 2011年03月08日 09:51:00

一下文章摘自 http://magustest.com/blog/whiteboxtesting/using-gcov-lcov/

 

gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具。下面介绍一下如何利用gcov来收集代码覆盖信息。
想要用gcov收集代码覆盖信息,需要在gcc编译代码的时候加上这2个选项 “-fprofile-arcs -ftest-coverage”,把这个简单的程序编译一下

gcc -fprofile-arcs -ftest-coverage hello.c -o hello

编译后会得到一个可执行文件hello和hello.gcno文件,当用gcc编译文件的时候,如果带有“-ftest-coverage”参数,就会生成这个.gcno文件,它包含了程序块和行号等信息
接下来可以运行这个hello的程序

./hello 5
./hello 12

运行结束以后会生成一个hello.gcda文件,如果一个可执行文件带有“-fprofile-arcs”参数编译出来,并且运行过至少一次,就会生成。这个文件包含了程序基本块跳转的信息。接下来可以用gcov生成代码覆盖信息:

gcov hello.c

运行结束以后会生成2个文件hello.c.gcov和myfunc.c.gcov。打开看里面的信息:

-: 0:Source:myfunc.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include
-: 2:
-: 3:void test(int count)
1: 4:{
-: 5: int i;
10: 6: for (i = 1; i < count; i++)
-: 7: {
9: 8: if (i % 3 == 0)
3: 9: printf (“%d is divisible by 3 /n”, i);
9: 10: if (i % 11 == 0)
#####: 11: printf (“%d is divisible by 11 /n”, i);
9: 12: if (i % 13 == 0)
#####: 13: printf (“%d is divisible by 13 /n”, i);
-: 14: }
1: 15:}

被标记为#####的代码行就是没有被执行过的,代码覆盖的信息是正确的,但是让人去读这些文字,实在是一个杯具。不用担心,有另外一个工具叫lcov,可以用程序解析这些晦涩的字符,最终输出成html格式的报告,很好吧!

lcov -d . -t ‘Hello test’ -o ‘hello_test.info’ -b . -c

指定lcov在当前目录“.”去找代码覆盖的信息,输出为’hello_test.info’ ,这个hello_test.info是一个中间结果,需要把它用genhtml来处理一下,genhtml是lcov里面的一个工具。

genhtml -o result hello_test.info

指定输出目录是 result。一个完整的html报告就生成了,做一个连接,把这个目录连到随便一个web server的目录下,就可以看报告了。

 

测试结果概览

具体某个文件的覆盖率

gcov和lcov基本上能满足测试过程中收集代码覆盖率信息的需求,不过有个遗憾就是gcov不能收集.so文件的代码覆盖信息。

覆盖率测试工具gcov & lcov使用手册

Gcov: 代码覆盖率工具 1.      编译: 编译时gcc添加编译选项“gcc-fprofile-arcs“和”–ftest-coverage”: e.g:gcc-fprofile-arcs  ...
  • kevin_ji
  • kevin_ji
  • 2016年03月14日 13:32
  • 1635

CMake编译项目集成Gcov/Lcov代码覆盖率测试

原文链接:http://blog.yeyuzhen.cn/?p=203
  • lostaway
  • lostaway
  • 2014年11月09日 12:33
  • 2926

Jenkins中集成Gcov代码覆盖率报告

最近终于把gcov代码覆盖报告集成到jenkins中了,总算是完成工作,写篇博客总结下。 我循序渐进地用了三个工具:gcov, lcov, gcovr 这三个工具原理(其实gcovr依赖于GNU的...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2016年04月12日 15:20
  • 1788

Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)

Linux下gcov和lcov代码覆盖率分析方法 gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具 使用方法:在gcc或者g++后面添加参数 -fprofile-ar...
  • w565911788
  • w565911788
  • 2012年05月30日 17:09
  • 2795

代码覆盖率测试工具:gcov+lcov

简单介绍代码覆盖率测试工具gcov及前端工具lcov
  • jfleecumt
  • jfleecumt
  • 2017年01月10日 09:43
  • 802

gcov和lcov代码覆盖率工具

1.GCOV查看arm-linux代码覆盖率 一、           关于gcov工具 gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参...
  • wjflyhigh
  • wjflyhigh
  • 2013年07月31日 17:54
  • 2231

gcov和lcov对linux c++分析代码覆盖率

gcov和lcov对linux c++分析代码覆盖率 2010年06月24日 星期四 下午 2:21 gcov伴随gcc 发布。gcc编译加入-fprofile-arcs ...
  • junecauzhang
  • junecauzhang
  • 2012年06月01日 23:46
  • 641

Linux平台代码覆盖率测试工具GCOV的前端工具LCOV简介

本博客http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content 1. Lcov是什么...
  • ganggexiongqi
  • ganggexiongqi
  • 2012年04月18日 14:42
  • 944

Linux平台代码覆盖率测试工具GCOV的前端工具LCOV简介

Content 1. Lcov是什么? 2. 如何在Linux平台安装Lcov? 3. 如何使用Lcov? (1) 使用lcov收集覆盖率数据并写入文件 (2) 使用genhtml生成基于H...
  • panpanloveruth
  • panpanloveruth
  • 2012年06月01日 11:01
  • 714

转载_Linux平台代码覆盖率测试工具GCOV的前端工具LCOV简介

Content 1. Lcov是什么? 2. 如何在Linux平台安装Lcov? 3. 如何使用Lcov? (1) 使用lcov收集覆盖率数据并写入文件 (2) 使用genhtml生成基于H...
  • williamwanglei
  • williamwanglei
  • 2013年03月01日 11:24
  • 1108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++代码覆盖率工具:gcov和lcov的使用入门
举报原因:
原因补充:

(最多只允许输入30个字)