gcov是在代碼運行時統(tǒng)計代碼覆蓋率的工具,隨著gcc一起發(fā)布的。它的使用很簡單,需要在編譯和鏈接時增加-fprofile-arcs -ftest-coverage生成二進制文件。gcov主要使用.gcno和.gcda兩個文件,.gcno是由-ftest-coverage產(chǎn)生的,它包含了重建基本塊圖和相應(yīng)的塊的源碼的行號的信息。.gcda是由加了-fprofile-arcs編譯參數(shù)的編譯后的文件運行所產(chǎn)生的,它包含了弧跳變的次數(shù)和其他的概要信息。
以測試samp3為例:有文件samp3.cpp、samp3.h、samp3_test.cpp(單元測試腳本)

1.編譯并鏈接samp3.cpp、samp3_test.cpp時增加參數(shù)-fprofile-arcs -ftest-coverage
除了生成可執(zhí)行文件test3之外,還生成了samp3.gcno和samp3_test.gcno二進制文件。
命令:g++ samp3.cpp samp3_test.cpp libgmock.a -fprofile-arcs -ftest-coverage -lpthread -o test3

2.執(zhí)行test3文件可生成*.gcda二進制文件


3.執(zhí)行命令gcov *.cpp
生成gcda文件之后執(zhí)行命令gcov *.cpp就會在屏幕上打印出測試的覆蓋率,并同時生成文件“*.cpp.gcov”,然后用vi打開就可以看見哪行被覆蓋掉了
如:執(zhí)行g(shù)cov samp3.cpp即打印出samp3文件的代碼覆蓋率為100%,同時生成文件samp3.cpp.gcov


4.vi *.cpp.gcov打開文件查看哪行被覆蓋掉了
如vi samp3.cpp.gcov可看到第7、8行被覆蓋了11次,除注釋空行外所有代碼均被覆蓋到了,覆蓋率100%。

5.github下載lcov源碼,直接make install 安裝
地址:https://github.com/linux-test-project/lcov.git
注:1.從windows上烤到linux上文件會存在CRLF,需要使用dos2unix *轉(zhuǎn)行成unix文件
2.沒有權(quán)限則使用sudo make install


6.在*.gcda目錄下執(zhí)行l(wèi)cov --directory? .? --capture --output-file app.info生成app.info文件


7. 執(zhí)行命令genhtml? -o? results? app.info生成results目錄

8.打開index.html


