Linux環境下的GCC編譯器與GDB調試工具介紹

假如現在我們有如下代碼需要編譯運行和調試。文件名爲:test.c

#include <stdio.h>
int main()
{
	int day, month, year, sum, leap;
	printf("input year month day:\n");
	scanf("%d%d%d",&year,&month,&day);
	switch(month)
	{
		case 1: sum = 0; break;
		case 2: sum = 31; break;
		case 3: sum = 59; break;
		case 4: sum = 90; break;
		
		//case 5: sum += 90; break;
		//case 6: sum += 90; break;
		//case 7: sum += 90; break;
		//case 8: sum += 90; break;
	}
	sum += day;
	if(year%400==0 || (year%4==0 && year%100!=0))
	{
		leap = 1;
		
	}
	else{
		leap = 0;	
	}
	if(leap == 1 && month>2)
	{
		sum++;
	}
	printf("it is the &dth day!\n",sum);
	return 0;
}

1GCC編譯器介紹

在使用GCC編譯器時,需要給出一些列的調用參數,其基本的調用格式如下:

gcc [options] [filenames]

其中options就是GCC所需的參數,filenames便是要編譯的文件名

options 的常用的參數有:

-C :只編譯,不鏈接生成可執行文件。輸入.c等源代碼文件,輸出.o爲後綴的目標文件。通常用於編譯不包含主程序的子程序文件。

-o output_filename:確定輸出文件的名稱爲output_filename,並且這個名稱不能與源文件同名。默認情況下爲:a.out

-g : 產生符號調試工具所必須的符號信息。若想對源代碼進行調試,就需要加入該選項

-O對程序進行優化編譯、鏈接。

-O2-O更好的優化編譯、鏈接,但整個編譯和鏈接過程會比較慢。


其中比較常用的編譯代碼的命令:(-Wall能夠使得GCC產生儘可能多的警告信息)

gcc -Wall test.c -o test


運行代碼的命令爲:(test是上面生成的目標文件test)

./test


2GDB調試工具介紹

1) 在使用GDB編譯程序時必須要讓GDB可以獲得程序的信息,故而需要在編譯時加入參數-g,編譯命令如下:

gcc -g -o可執行文件名 源文件名

如:gcc -g -o test test.c


2) 在生成帶有調試信息的可執行文件後,可使用如下命令加載可執行程序到GDB調試工具中

gdb 可執行文件

如:gdb test

當然也可以先輸入gdb命令,然後在輸入命令:

file 可執行文件名

如:file test


3) 在進入調試工具GDB後,可以使用break命令設置斷點,如:

break line5                          //運行到第五行停止

break function1                   //運行到函數function1後停止

break line/function if xx      //符合if條件時,運行到指定位置


4) 在程序運行到第一個斷點停止後,可以對接下來的代碼進行單步跟蹤,使用命令:

step

當然也可以使用continue命令繼續運行程序,使得程序運行至下一個斷點或運行完成。


5) 在逐步追蹤的過程中,可以使用如下命令查看變量值:

print 變量名/表達式

print $                                 //表示輸出當前序號的前一個序號的值

print $$                               //表示輸出當前序號向前第二個序號

假如當前序號爲3,則print $ 表示輸出序號爲2中的數據,print $$ 輸出序號爲1中的數據。


print還可用戶給變量賦值和打印連續的空間

print var = 5                                      //給變量var賦值爲5

print 開始表達式@連續空間大小             //printarr[2]@5


6) display用戶顯示錶達式的值。與print不同的是程序每步運行都會顯示錶達式的值。

若想使display暫時不能顯示可以使用命令:

disable display

恢復display命令爲:

enable display

直接刪除display命令爲:

delete display [顯示數據的序號]


當設置的程序斷點不再需要暫停運行時,可以使用deleteclear命令清除斷點,二者的區別在於:

delete 斷點編號

clear 斷點所在行號


顯示代碼使用命令list

list[+] :顯示當前行後面的代碼

list-:顯示當前行前面的代碼

list n: 顯示程序第n行周圍的代碼

list function: 顯示函數名爲function的功能函數代碼

list first, last: 顯示第first行代碼到last行代碼

list , last:顯示從當前行到last行之間的代碼

list filename:n :顯示文件filename的第n行代碼

list filename:function:顯示文件名爲filename中的函數名爲function的函數代碼


set listsize count :設置list顯示的行數爲count

show listsize: 查看當前源代碼的顯示行數


參考文獻:

明日科技,linux C 從入門到精通, 清華大學出版社, 2012.12






發佈了33 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章