gcov初试用
gcov是标准的GNU覆盖测量工具,这里就尝试试用一下。有如下这么一个源文件:
/**
* gcc -fprofile-arcs -ftest-coverage tmp.c
*/
#include <stdio.h>
int main(int argc, char **argv)
{
int i, total;
total = 0;
for (i = 0; i < 10; i++)
total += i;
if (total != 45)
printf ("Failure\n");
else
printf ("Success\n");
return 0;
}
按照源文件里的注释提示编译它:
[root@localhost gcov]# cat /etc/issue CentOS Linux release 6.0 (Final) Kernel \r on an \m [root@localhost gcov]# ls tmp.c [root@localhost gcov]# gcc -fprofile-arcs -ftest-coverage tmp.c [root@localhost gcov]# ls -a . .. a.out tmp.c tmp.gcno [root@localhost gcov]#
除了编译链接得到可执行程序a.out外,还生成了一个tmp.gcno的文件,执行a.out后,又将生成tmp.gcda:
[root@localhost gcov]# ./a.out Success [root@localhost gcov]# ls -a . .. a.out tmp.c tmp.gcda tmp.gcno
再使用gcov执行命令”gcov tmp.c”,得到tmp.c.gcov,cat看看其内容:
[root@localhost gcov]# gcov tmp.c
File 'tmp.c'
Lines executed:87.50% of 8
tmp.c:creating 'tmp.c.gcov'
[root@localhost gcov]# cat tmp.c.gcov
-: 0:Source:tmp.c
-: 0:Graph:tmp.gcno
-: 0:Data:tmp.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:/**
-: 2: * gcc -fprofile-arcs -ftest-coverage tmp.c
-: 3: */
-: 4:#include <stdio.h>
-: 5:
1: 6:int main(int argc, char **argv)
-: 7:{
-: 8: int i, total;
1: 9: total = 0;
-: 10:
11: 11: for (i = 0; i < 10; i++)
10: 12: total += i;
-: 13:
1: 14: if (total != 45)
#####: 15: printf ("Failure\n");
-: 16: else
1: 17: printf ("Success\n");
-: 18:
1: 19: return 0;
-: 20:}
-: 21:
[root@localhost gcov]#
第一列里的数字就表示该行代码被执行到的次数,比如:
第11行显示的11表示代码“for (i = 0; i < 10; i++)”被执行了11次。
第12行显示的10表示代码“total += i;”被执行了10次。
打井号的表示该行代码没执行到。
可以通过gcov的-a选项显示更详细的信息,看示例:
[root@localhost gcov]# gcov -a tmp.c
File ‘tmp.c’
Lines executed:87.50% of 8
tmp.c:creating ‘tmp.c.gcov’
[root@localhost gcov]# cat tmp.c.gcov
-: 0:Source:tmp.c
-: 0:Graph:tmp.gcno
-: 0:Data:tmp.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:/**
-: 2: * gcc -fprofile-arcs -ftest-coverage tmp.c
-: 3: */
-: 4:#include <stdio.h>
-: 5:
1: 6:int main(int argc, char **argv)
-: 7:{
-: 8: int i, total;
1: 9: total = 0;
-: 10:
11: 11: for (i = 0; i < 10; i++)
1: 11-block 0
10: 11-block 1
11: 11-block 2
10: 12: total += i;
-: 13:
1: 14: if (total != 45)
1: 14-block 0
#####: 15: printf ("Failure\n");
$$$$$: 15-block 0
-: 16: else
1: 17: printf ("Success\n");
1: 17-block 0
-: 18:
1: 19: return 0;
1: 19-block 0
-: 20:}
-: 21:
[root@localhost gcov]#
这样,第11行代码分为3块分别计数表示,块0“i = 0; ”执行1次,块1“i < 10; ”执行10次,而块1“i++”执行11次。
完全参考:http://gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html#Invoking-Gcov
转载请保留地址:http://lenky.info/archives/2012/08/24/1884 或 http://lenky.info/?p=1884
备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。
法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以或书面等方式告知,本站将及时删除相关内容或链接。
创作共享协议. Copyright ©2011-2013