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创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。
法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以或书面等方式告知,本站将及时删除相关内容或链接。