Gcov
(GCC Coverage
)是一个测试代码覆盖率的工具,是一个命令行方式的控制台程序,伴随GCC
发布,配合GCC
共同实现对C/C++
文件的语句覆盖和分支覆盖测试,与程序概要分析工具(profiling tool
,例如gprof
)一起工作可以估计程序中哪一段代码最耗时。
gcov
可以统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码(section code
)的耗时(执行时间)。因此,gcov
可以帮你优化代码,当然这个优化动作还是应该由开发者完成。
测试用例:
#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;
}
编译:
$ 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
文件,该文件记录了每行代码被执行的次数。
$ 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篇
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。