linux下使用GDB除錯程式
阿新 • • 發佈:2019-01-07
現有一c原始檔“gdb-01.c”,下面用GDB除錯該程式。
/*gdb-01.c*/
#include<stdio.h>
static int sum(int value);
int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("引數輸入錯誤!\n");
return -1;
}
int input = argv[1] - '0';
int result = sum(input);
printf("你輸入的值為:%d,計算結果為:%d\n" ,input,result);
return 0;
}
/*累加求和函式*/
static int sum(int value)
{
int result = 0;
int i = 0;
for (i = 0; i < value; ++ i) //該處有問題,需要debug出來
{
result += i;
}
return result;
}
- 首先用gcc編譯“gdb-01.c”生成可執行檔案test,為了能用gdb除錯改程式,需要在編譯時加入‘-g’選項。命令如下:
$ gcc -o test gdb-01.c -g - 載入程式。用下面的命令將可執行檔案test載入到GDB中,並進入(gdb)模式:
$ gdb test - 設定輸入引數。通常可執行檔案在執行的時候需要輸入引數,gdb中使用如下命令格式:”set args value1 value2 …”。例如,test中將一個引數(如3)傳入程式:
(gdb) set args 3 - 列印程式碼內容。命令list用於列出可執行檔案對應原始檔的程式碼,命令格式為“list 開始的行號”,然後每次按Enter鍵後順序向下列出程式碼。
(gdb) list 1 - 設定斷點。b 命令在某一行設定斷點,程式執行到斷點的位置會中斷。
(gdb) b 24 - 執行程式。GDB在預設的情況下是不會讓可執行檔案執行的。此時,程式並沒有真正執行起來,只是裝載進了GDB中。要是程式執行需要輸入run命令。
(gdb) run 3 - 顯示變數。在程式執行到第5步所設定的斷點時,程式中斷等待進一步指令。此時,可以進行一系列操作,其中,命令display可以顯示變數的值。
(gdb) display result #顯示變數result的值 - 修改變數的值。用set命令。
(gdb) set result = 6
(gdb) c #繼續執行 - 退出GDB。除錯完程式後,使用q命令退出GDB。
(gdb) q
$ #返回使用者模式
上面給出了一個簡單的例子來演示GDB基本使用。至於GDB的常用命令,直接百度或google,能搜到一大堆,這裡就不再贅述啦~~