GCC gcov 代碼覆蓋工具的簡單使用

gcov 是一個可用於C/C++的代碼覆蓋工具,是GCC的內建工具。

它的使用很簡單,需要在編譯和鏈接時增加-fprofile-arcs -ftest-coverage生成二進制文件。gcov主要使用.gcno和.gcda兩個文件,.gcno是由-ftest-coverage產生的,它包含了重建基本塊圖和相應的塊的源碼的行號的信息。.gcda是由加了-fprofile-arcs編譯參數的編譯後的文件運行所產生的,它包含了弧跳變的次數和其他的概要信息。

舉個例子:
有一個源文件main.cc:

/// @file main.cc

#include <cstdio>

void test(int num)
{
	for(int i = 0; i < num; ++i)
		printf("*");
	printf("\n");
}

int main()
{
	int num ;
	scanf("%d", &num);
	
	if (num <= 0) {
		printf("num(%d) <= 0\n", num);
	}
	else for(int i = 1; i <= num; ++i) {
		test(i);
	}
	return 0;
}

編譯-fprofile-arcs -ftest-coverage 會產生.gcno文件:

192:test lurongming$ gcc -fprofile-arcs -ftest-coverage main.cc -o main
192:test lurongming$ ls
main		main.cc		main.gcno

接下來運行可執行文件會產生.gcda文件:

192:test lurongming$ ./main
5
*
**
***
****
*****
192:test lurongming$ ls
main		main.cc		main.gcda	main.gcno

用gcov生成代碼覆蓋信息,可以看到新增了main.cc.gcov文件:

192:test lurongming$ gcov main.cc
File 'main.cc'
Lines executed:83.33% of 12
main.cc:creating 'main.cc.gcov'

192:test lurongming$ ls
main		main.cc		main.cc.gcov	main.gcda	main.gcno

查看main.cc.gcov文件的信息:

192:test lurongming$ cat main.cc.gcov
        -:    0:Source:main.cc
        -:    0:Graph:main.gcno
        -:    0:Data:main.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:/// @file main.cc
        -:    2:
        -:    3:#include <cstdio>
        -:    4:
        -:    5:void test(int num)
        -:    6:{
       40:    7:	for(int i = 0; i < num; ++i)
       15:    8:		printf("*");
        5:    9:	printf("\n");
        5:   10:}
        -:   11:
        -:   12:int main()
        -:   13:{
        -:   14:	int num ;
        1:   15:	scanf("%d", &num);
        -:   16:	
        1:   17:	if (num <= 0) {
    #####:   18:		printf("num(%d) <= 0\n", num);
    #####:   19:	}
       12:   20:	else for(int i = 1; i <= num; ++i) {
        5:   21:		test(i);
        5:   22:	}
        1:   23:	return 0;
        -:   24:}

被標記爲#####的代碼行就是沒有被執行過的,-表示無所謂執行的,其他數字表示執行的次數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章