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