Gcov
(GCC Coverage
)是一个测试代码覆盖率的工具,是一个命令行方式的控制台程序,伴随GCC
发布,配合GCC
共同实现对C/C++
文件的语句覆盖和分支覆盖测试,与程序概要分析工具(profiling tool
,例如gprof
)一块儿工做能够估计程序中哪一段代码最耗时。html
gcov
能够统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码(section code
)的耗时(执行时间)。所以,gcov
能够帮你优化代码,固然这个优化动做仍是应该由开发者完成。c++
测试用例:git
#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("fail!\n"); } else { printf("success!\n"); } return 0; }
编译:github
$ g++ -fprofile-arcs -ftest-coverage -o gcov_test gcov_test.cpp $ ls gcov_test gcov_test.cpp gcov_test.gcno
-fprofile-arcs -ftest-coverage
告诉编译器生成gcov
须要的额外信息,并在目标文件中插入gcov
须要的extra profiling information
。所以,该命令在生成可执行文件gcov_test
的同时生成gcov_test.gcno
文件(gcov note
文件)。工具
收集信息:性能
$ ./gcov_test success! $ ls gcov_test gcov_test.cpp gcov_test.gcda gcov_test.gcno
执行该程序,生成gcov_test.gcda
文件(gcov data
文件)。测试
报告:优化
$ gcov gcov_test.cpp File\u2018gcov_test.cpp\u2019 \u5df2\u6267\u884c\u7684\u884c\u6570\uff1a87.50% (\u5171 8 \u884c) \u6b63\u5728\u521b\u5efa 'gcov_test.cpp.gcov' $ ls gcov_test gcov_test.cpp gcov_test.cpp.gcov gcov_test.gcda gcov_test.gcno
生成gcov_test.cpp.gcov
文件,该文件记录了每行代码被执行的次数。.net
$ cat gcov_test.cpp.gcov -: 0:Source:gcov_test.cpp -: 0:Graph:gcov_test.gcno -: 0:Data:gcov_test.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include <stdio.h> -: 2: -: 3: 1: 4:int main(int argc, char** argv) -: 5:{ -: 6: int i, total; -: 7: 1: 8: total = 0; -: 9: 11: 10: for(i = 0; i < 10; i++) { 10: 11: total += i; -: 12: } -: 13: 1: 14: if(total != 45) { #####: 15: printf("fail!\n"); -: 16: } else { 1: 17: printf("success!\n"); -: 18: } -: 19: 1: 20: return 0; -: 21:}
GCOV 使用用例
gcov lcov 覆盖c/c++项目入门
Linux下c/c++项目代码覆盖率的产生方法
基于GCOV的C/C++代码覆盖率分析工具
Linux性能评测工具之一:gprof篇命令行