GCOV使用

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

相關文章
相關標籤/搜索