1. 程式人生 > >GDB除錯程式的使用

GDB除錯程式的使用

GDB概述:

GDB是GNU開源組織釋出的一個強大的UNIX下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像VC、BCB等IDE的除錯,但如果你是在UNIX平臺下做軟體,你會發現GDB這個除錯工具有比VC、BCB的圖形化偵錯程式更強大的功能。

    一般來說GDB主要有三大功能: 1)啟動被除錯函式

             2)讓被除錯的程式在指定位置停住

      3) 當程式停住時,檢查它的狀態值

GDB的使用:

舉下面的程式為例:

寫完程式之後,輸入“ gcc  -g  gdb.c ” 和 “ gcc a.out ” 啟動GDB對程式的除錯。

GDB的指令:

執行指令:run(簡寫“r”);  

設定中斷指令:break  行數(簡寫“b”):;

檢視程式碼指令:list

在GDB中使用檢視原始碼相關的命令時,有一個當前檔案的概念,當命令的位置引數沒有限定一個檔案的時候(不論是明確限定還是隱含限定),將使用當前檔案。當前檔案預設是main函式所在檔案,如果程式當前正處於斷點位置,則斷點所在檔案即為當前檔案。

如下圖: 

 會發現函式不是從頭開始顯示,這是因為當前行不是從頭開始的程式只能;且每次顯示10行左右,這是可以改變引數值的。

引申的指令:

list - :顯示當前行前面程式。出現

list  +: 往後顯示原始碼。
                set listsize <count>  設定一次顯示原始碼的行數
list , <last>顯示從當前行到last行之間的原始碼
檢視狀態值指令:print  變數名(簡寫 p)
檢視斷點資訊指令:info  break
單步執行指令:next(不會進入子函式)
step(可進入子函式)
繼續執行指令:continue(簡寫“c”,在斷點處繼續執行,知道遇到下一個斷點或者程式結束)
 finish(繼續執行,結束此函式)
退出指令:quit
運用GDB除錯段錯誤
如下段程式:
#include<stdio.h>
int main()
{
*pr = "HELLO WORLD";
pr ++;
*pr = 'L';
printf("pr = %d\n",pr);
return 0;
}
執行程式之後發現出現段錯誤了,執行GDB指令在哪裡停住,哪裡就是出現段錯誤的地方,便於我們修改。