在gcc項目中,編譯參數加上-fprofile-arcs -ftest-coverage,連接參數加上-lgcov
編譯以後除了產生.o文件以外,還生成*.gcno文件,
先執行編譯的結果文件,會生成*.gcda文件(可以反覆執行多次,都會累加到對應的gcda文件中)
執行gcov myfile.cpp(myfile.cpp是某個源碼文件)
提示:
File‘src/ceftool.cpp’
已執行的行數:54.55% (共 22 行)
src/ceftool.cpp:正在創建‘ceftool.cpp.gcov’
File‘/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iostream’
已執行的行數:100.00% (共 1 行)
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iostream:正在創建‘iostream.gcov’
File‘/home/liubin/abwork/repository/leadtone/pmapi_mig_v2.0/2.5-r2559/include/pmapi2.5/pmscl/PmComSmartPtr.h’
已執行的行數:0.00% (共 6 行)
/home/liubin/abwork/repository/leadtone/pmapi_mig_v2.0/2.5-r2559/include/pmapi2.5/pmscl/PmComSmartPtr.h:正在創建‘PmComSmartPtr.h.gcov’
在當前目錄生成*.gcov文件,直接打開gcov文件可以查看結果,如下:
/home/liubin/svn/cefsdk/project/unix/ceftool>vi ceftool.cpp.gcov
1 -: 0:Source:src/ceftool.cpp
2 -: 0:Graph:ceftool.gcno
3 -: 0:Data:ceftool.gcda
4 -: 0:Runs:1
5 -: 0:Programs:1
6 -: 1:#include "ceftool.h"
7 -: 2:Cef* g_pCef=PM_NULL;
8 #####: 3:void check_cef_home()
9 -: 4:{
10 #####: 5: if( pm_getenv( "MIG_HOME" ) == PM_NULL ||
11 -: 6: pm_getenv( "MIG_HOME" )[0] == '/0' )
12 -: 7: {
13 #####: 8: fprintf( stderr, "Can not find env MIG_HOME, please install cef first!/n");
14 #####: 9: exit(-1);
15 -: 10: }
16 #####: 11:}
17 -: 12:
18 #####: 13:static int show_version()
19 -: 14:{
20 #####: 15: printf("ceftool ver %s, build on %s %s/n", CEFTOOL_VERSION, __DATE__, __TIME__ );
21 #####: 16: return 0;
22 -: 17:}
23 1: 18:static int show_help()
24 -: 19:{
25 1: 20: printf("ceftool ver %s, build on %s %s/n", CEFTOOL_VERSION, __DATE__, __TIME__ );
26 1: 21: return 0;
其中"-"是表示無意義的行,####表示應該執行,但是沒有執行的代碼,旁邊有數字的,表示執行了多少次