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篇命令行