gcov是在代碼運(yùn)行時統(tǒng)計(jì)代碼覆蓋率的工具畅蹂,隨著gcc一起發(fā)布的。它的使用很簡單,需要在編譯和鏈接時增加-fprofile-arcs -ftest-coverage生成二進(jìn)制文件。gcov主要使用.gcno和.gcda兩個文件,.gcno是由-ftest-coverage產(chǎn)生的喝检,它包含了重建基本塊圖和相應(yīng)的塊的源碼的行號的信息。.gcda是由加了-fprofile-arcs編譯參數(shù)的編譯后的文件運(yùn)行所產(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二進(jìn)制文件抠忘。
命令:g++ samp3.cpp samp3_test.cpp libgmock.a -fprofile-arcs -ftest-coverage -lpthread -o test3
2.執(zhí)行test3文件可生成*.gcda二進(jìn)制文件
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