文章目錄
1.簡介
GDB是GNU開源組織發佈的一個強大的UNIX下的程序調試工具,可完成以下功能
- 運行被調試程序,設置所有能影響該程序的參數和變量
- 保證被調試程序在指定的條件下停止運行
- 當被調試程序停止時,讓開發工程師檢查發生了什麼
- 根據每次調試器的提示信息來做相應的改變,以便修正某個錯誤引起的問題
2.gdb使用
1)開始調試
首先使用gcc對源文件進行編譯,一定要加上-g顯示調試信息,如下
gcc -g test.c # 第一步
gdb a.out # 第二步
或者使用-o
對特定的名字的可執行程序進行調試
gcc -g test.c -o test # 第一步
gdb test # 第二步
2)gdb調試參數
進入gdb模式下,使用以下命令
命令 | 功能 |
---|---|
(gdb)l | 參看源文件(默認爲前10行),加標號,回到第一次顯示10行的位置,如l 1 。 同理可跳轉值l 2 |
(gdb)b N | 在N行設置斷點 |
(gdb)info b | 查看設置斷點情況 |
(gdb)del n | 刪除斷點,如刪除第一個斷點爲del 1 ,同樣刪除第二個斷點爲del 2 |
(gdb)r | 運行代碼 |
(gdb)p n | 查看變量值 |
(gdb)n | 單步運行,遇到函數不進入 |
(gdb)s | 單步運行,遇到函數進入函數 |
(gdb)c | 恢復程序運行嗎,直接運行到程序的下一個斷點 |
(gdb)help command | 幫助 |
(gdb)q | 退出gdb調試 |
3)調試流程
在Linux中使用gdb調試下面的計算兩個數之間的乘積和的一個程序
int main()
{
int count =1;
int sum = 1;
int n;
int limit_number;
printf("this program is to multiply between numbers!\n");
printf("Enter the limited numbers: ");
scanf("%d",&n);
if(n > 0)
{
while(count++ < n)
{
sum *= count;
}
printf("sum = %d\n",sum);
}
else if( n < 0 )
{
printf("wrong way input ,you should input > 0 numbers! try again!\n");
printf("Enter the limited numbers: ");
scanf("%d",&limit_number); //需要指定一個和以前不一樣的限定值,以防止按參數傳遞
while(count++ < limit_number)
{
sum *= count;
}
printf("sum = %d\n",sum);
}
else
printf("the sum all equal to 0!,Bye\n");
return 0;
}
a.進入gdb調試
b.使用l命令查看
c.設置斷點並查看斷點
這裏在12行和19行設置了兩個斷點
d.運行
單步運行至13行斷點處
e.查看變量值
查看設置的sum
變量和count
變量
f.繼續運行到下一個斷點
跳過此斷點,使用c命令繼續運行到下一個斷點
3.gdb使用要點
- gcc編譯選項中一定要加入
-g
- 只有在代碼處於“運行”或者“暫停”狀態時才能查看變量值
- 設置斷點後程序在指定行之前停止
4. 參考
gdb的其他詳細用法可參考一下兩篇博文
參考博文1