Open Pin-Jiun opened 2 years ago
GNU軟體系統中的標準偵錯器,支持以下語言
測試檔案testgdb.c
#include<stdio.h> int main(){ /* 2D array declaration*/ int disp[2][3]; /*Counter variables for the loop*/ int i, j; for(i=0; i<2; i++) { for(j=0;j<3;j++) { printf("Enter value for disp[%d][%d]:", i, j); scanf("%d", &disp[i][j]); } } //Displaying array elements printf("Two Dimensional array elements:\n"); for(i=0; i<2; i++) { for(j=0;j<3;j++) { printf("%d ", disp[i][j]); if(j==2){ printf("\n"); } } } return 0; }
若要將 C 的原始碼編譯成執行檔,可以執行 gcc 並指定 C 語言的原始碼檔案:
gcc testgdb.c
GCC 預設會執行編譯與連結,直接產生一個可以執行的程式,輸出至 a.out 這個檔案,完成編譯之後,即可執行這個程式:
./a.out
若要指定輸出的執行檔名稱,可以加上 -o 參數,並指定輸出的檔案名稱:
gcc -o exe_Name(執行檔名稱) testgdb.c
若想讓編譯器只進行編譯、不要連結,可加上 -c 參數,這樣就會建立一個 object 檔 .o
object 檔 .o
gcc -c hello.c
執行這行之後,就會產生一個 hello.o檔案,後續若要進行連結,就可以使用這個object 檔:
hello.o
object 檔
gcc -o hello hello.o
通常在大型的專案中,都會將編譯與連結兩個動作拆開,以下是一個典型的例子:
# 編譯個別 C 檔案 gcc -c a.c gcc -c b.c gcc -c c.c # 連結 gcc -o myapp a.o b.o c.o
這樣作除了可讓程式碼方便管理之外,也可以加快編譯的速度,假設我們在開發過程中,更改了 b.c 的內容,在重新編譯時就只要編譯 b.c,然後即可進連結,省去重新編譯 a.c 與 c.c 的時間。
顯示警告訊息 -Wall 加入除錯資訊 -g 一定要記得加-g 方可進行gdb除錯
-Wall
-g
gcc -Wall -g -o test testgdb.c
開始進行除錯,如要退出gdb模式,輸入quit gdb ./test
quit
gdb ./test
成功則會顯示Reading symbols from ./test...
Reading symbols from ./test...
1.設立至少一個breakpoint ex: b main 2.依照需求使用layout src/asm/split 3.執行此程式 run (r) 4.n/step/finish
GNU Debugger (GDB)
GNU軟體系統中的標準偵錯器,支持以下語言
測試檔案testgdb.c
GCC C語言編譯回顧
若要將 C 的原始碼編譯成執行檔,可以執行 gcc 並指定 C 語言的原始碼檔案:
GCC 預設會執行編譯與連結,直接產生一個可以執行的程式,輸出至 a.out 這個檔案,完成編譯之後,即可執行這個程式:
若要指定輸出的執行檔名稱,可以加上 -o 參數,並指定輸出的檔案名稱:
若想讓編譯器只進行編譯、不要連結,可加上 -c 參數,這樣就會建立一個
object 檔 .o
執行這行之後,就會產生一個
hello.o
檔案,後續若要進行連結,就可以使用這個object 檔
:通常在大型的專案中,都會將編譯與連結兩個動作拆開,以下是一個典型的例子:
這樣作除了可讓程式碼方便管理之外,也可以加快編譯的速度,假設我們在開發過程中,更改了 b.c 的內容,在重新編譯時就只要編譯 b.c,然後即可進連結,省去重新編譯 a.c 與 c.c 的時間。
GDB除錯
顯示警告訊息
-Wall
加入除錯資訊-g
一定要記得加-g 方可進行gdb除錯開始進行除錯,如要退出gdb模式,輸入
quit
gdb ./test
成功則會顯示
Reading symbols from ./test...
GDB commands
1.設立至少一個breakpoint ex: b main 2.依照需求使用layout src/asm/split 3.執行此程式 run (r) 4.n/step/finish