GCOV使用
来源:互联网 发布:mac唇釉 编辑:程序博客网 时间:2024/04/29 03:55
1. gcov是什么?
- Gcov is GCC Coverage
- 是一个测试代码覆盖率的工具
- 是一个命令行方式的控制台程序
- 伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试;
- 与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时;
注:程序概要分析工具是分析代码性能的工具。
2. gcov能做什么?
gcov可以统计
- 每一行代码的执行频率
- 实际上哪些代码确实被执行了
- 每一段代码(section code)的耗时(执行时间)
3. 如何使用gcov?
filename: test.c
#include <iostream> using namespace std; int main() { int i,total; total = 0; for (i=0; i<10; i++) total += i; if (total != 45) cout << "Failure!" << endl; else cout << "Success!" << endl; return 0; }
3.1 使用gcov的3个阶段
(1) 编译
# gcc -fprofile-arcs -ftest-coverage -o test test.c# lstest test.c test.gcno
-fprofile-arcs -ftest-coverage告诉编译器生成gcov需要的额外信息,并在目标文件中插入gcov需要的extra profiling information。因此,该命令在生成可执行文件test的同时生成test.gcno文件(gcov note文件)。
(2) 收集信息
# ./testSuccess# lstest test.c test.gcda test.gcno执行该程序,生成test.gcda文件(gcov data文件)。
(3) 报告
# gcov test.cFile 'test.c'Lines executed:87.50% of 8test.c:creating 'test.c.gcov'# lstest test.c test.c.gcov test.gcda test.gcno生成test.c.gcov文件,该文件记录了每行代码被执行的次数。test.c.gcov文件内容如下,蓝色表示笔者添加的注释。 -: 0:Source:test.c -: 0:Graph:test.gcno -: 0:Data:test.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include //前面的数字表明该clause被执行的次数,下同 -: 2: -: 3:int main (void) 1: 4:{ -: 5: int i, total; -: 6: 1: 7: total = 0; -: 8: 11: 9: for (i = 0; i < 10; i++) //前面的数字11表明该clause被执行11次 10: 10: total += i; -: 11: 1: 12: if (total != 45) #####: 13: printf ("Failure/n"); -: 14: else 1: 15: printf ("Success/n"); 1: 16: return 0; -: 17:} -: 18:
3.2 gcov的选项
gcov的选项不多,也好理解,此处选3个典型的选项并结合例子加以说明。
(1) -a, --all-blocks在.gcov文件中输出每个基本快(basic block)的执行次数。如果没有-a选项,则输出'main'函数这个block的执行次数,如上所示。使用该选项可以 Write individual execution counts for every basic block. Normally gcov outputs execution counts only for the main blocks of a line. With this option you can determine if blocks within a single line are not being executed.# gcov -a test.cFile 'test.c'Lines executed:87.50% of 8test.c:creating 'test.c.gcov' Test.c.gcov文件内容。 -: 0:Source:test.c -: 0:Graph:test.gcno -: 0:Data:test.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include -: 2: -: 3:int main (void) 1: 4:{ -: 5: int i, total; -: 6: 1: 7: total = 0; -: 8: 11: 9: for (i = 0; i < 10; i++) 1: 9-block 0 10: 9-block 1 11: 9-block 2 10: 10: total += i; -: 11: 1: 12: if (total != 45) 1: 12-block 0 #####: 13: printf ("Failure/n"); $: 13-block 0 -: 14: else 1: 15: printf ("Success/n"); 1: 15-block 0 1: 16: return 0; 1: 16-block 0 -: 17:} -: 18:(2) -b, --branch-probabilities 在.gcov文件中输出每个分支的执行频率,并有分支统计信息。 # gcov -b test.cFile 'test.c'Lines executed:87.50% of 8Branches executed:100.00% of 4Taken at least once:75.00% of 4Calls executed:50.00% of 2test.c:creating 'test.c.gcov' -: 0:Source:test.c -: 0:Graph:test.gcno -: 0:Data:test.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include -: 2: -: 3:int main (void)function main called 1 returned 100% blocks executed 86% 1: 4:{ -: 5: int i, total; -: 6: 1: 7: total = 0; -: 8: 11: 9: for (i = 0; i < 10; i++)branch 0 taken 91%branch 1 taken 9% (fallthrough) 10: 10: total += i; -: 11: 1: 12: if (total != 45)branch 0 taken 0% (fallthrough)branch 1 taken 100% #####: 13: printf ("Failure/n");call 0 never executed -: 14: else 1: 15: printf ("Success/n");call 0 returned 100% 1: 16: return 0; -: 17:} -: 18:(3) -c, --branch-counts 在.gcov文件中输出每个分支的执行次数。# gcov -c test.cFile 'test.c'Lines executed:87.50% of 8test.c:creating 'test.c.gcov' -c是默认选项,其结果与"gcov test.c"执行结果相同。
0 0
- GCOV使用
- GCOV使用
- GCOV 使用用例
- gcov的使用 收藏
- gcov 使用笔记
- gcov介绍+使用实例
- GCOV简易使用
- gcov
- 使用gcov进行保险测试
- gcov和lcov的使用
- gcov和lcov使用经验
- gcov源码,供学习使用。
- gcov代码覆盖率使用gcov完成代码覆盖率的测试
- 使用gcov提高代码测试覆盖率
- 使用gcov完成代码覆盖率的测试
- GCOV的使用-测试代码覆盖率
- gcov、lcov与genhtml 使用心得
- gcov、lcov与genhtml 使用心得
- 渣渣作业2.2
- c#学习中关于new和override的一点小结
- 【架构】 Session集中管理MSM
- iOS Block
- centos7 VMware workstation 10 添加多网卡及重命名为ethx(eth0,eth1失败)(还想再添加网卡eth1???)
- GCOV使用
- 渣渣作业2.3
- emacs快捷键
- php中empty(), is_null(), isset()函数区别
- 自签名的证书
- hdu1080 Human Gene Functions (动态规划)
- mysqlbackup 恢复特定表
- IE8 中text-overflow:ellipsis 与text-align:right组合样式BUG
- gitlab git clone 服务内存飙升