使用GCOV進行代碼覆蓋率統計


GCOV是隨GCC一起發布的用於代碼覆蓋率統計的工具,一般配合其圖形化工具LCOV一起使用。

一、安裝

GCOV不需要單獨安裝,LCOV下載后執行sudo make install即可完成安裝。

二、使用

下面以針對hello.c文件的覆蓋率統計為例,說明使用方法。

#include<stdio.h>

int main(int argc,char* argv[])
{
    if(argc>1)
       printf("if\n");
    else
       printf("else\n");
    return 0;
}

編譯:

        # gcc -fprofile-arcs -ftest-coverage hello.c -o hello       (編譯完成后,會生成:hello.gcno,由-ftest-coverage產生,它包含了重建基本塊圖和相應的塊的源碼的行號的信息)

運行:

        # ./hello      (這一步會生成 hello.gcda, 由加了-fprofile-arcs編譯參數的編譯后的文件運行所產生的,它包含了弧跳變的次數和其他的概要信息)

生成代碼覆蓋信息:

        # gcov hello.c       (這一步生成hello.c.gcov,就是代碼覆蓋信息,hello.c.gcov 文件中包含了代碼覆蓋的統計數據,數字代表了每行代碼被執行的次數及行號)

到這一步,就可以打開hello.c.gcov查看代碼覆蓋率,但是不夠直觀,因此需要借助LCOV實現代碼覆蓋率統計數據的圖形化顯示。

生成LCOV可讀的文件:

       # lcov -d . -t 'Hello test' -o 'hello_test.info' -b . -c          (我們借助lcov對hello.c.gcov進行改造,可以看見生成了hello_test.info)

生成圖形化展示結果:

       # genhtml -o result hello_test.info                                  (生成了result文件夾,借助web服務器,我們就可以很直觀的看到結果了)

用瀏覽器打開index.html即可看到直觀的統計數據。

三、遇到的問題

執行完./hello,發現並沒有在當前目錄生成gcda文件,進一步執行gcov hello.c可見如下錯誤:

hello.gcda:無法打開數據文件,假定未被執行過

3.gcno:cannot open notes file

File ‘Hello.c’

沒有可執行行

Removing ‘hello.c.gcov

生成上述錯誤的原因是所使用機器以前有人在bash_profile中對GCOV進行了配置,指定生成gcda文件到其它的路徑了。解決的方法很簡單,只要設一下GCOV_PREFIX和GCOV_PREFIX_STRIP這兩個環境變量就可以了。GCOV_PREFIX制定生成數據文件的前綴,GCOV_PREFIX_STRIP表示需要在原來的路徑上去掉多少層目錄,通過指定這兩個變量的值把數據文件生成到我們想要的地方

export GCOV_PREFIX=”/home/dce/work/test/”
export GCOV_PREFIX_STRIP=5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM