1. 程式人生 > >Gdb除錯斷點問題(思考記錄)

Gdb除錯斷點問題(思考記錄)

以 例: 輸出1-100之間的素數  為例

//func.c

在儲存退出後首先使用 Gcc 對 func.c 進行編譯,注意一定要加上選項“-g” ,這樣編譯出的可執行程式碼中才包含除錯資訊,否則之後 Gdb 無法載入該可執行檔案。
gcc -g func.c -o test

 

雖然這段程式沒有錯誤,但除錯完全正確的程式可以更加了解 Gdb 的使用流程。接下來就啟動 Gdb 進行除錯。注意,Gdb 進行除錯的是可執行檔案,而不是如“.c”的原始碼,因此,需要先通過 Gcc 編譯生成可執行檔案才能用 Gdb 進行除錯

輸入命令:gdb test 進入除錯模式

使用b+行號,在某行插入斷點,本例在第10行插入斷點,回車後顯示斷點1在func.c檔案的第10行

輸入r,執行程式,執行到第9行,第10行不執行;

輸入p flag,檢視f變數flag的值

輸入c,繼續執行程式,使用p命令可繼續檢視變數。

在本例中第一次執行到斷點時,數為1,為素數滿足條件故flag的值為0

第二次執行到斷點時,數為2,為素數滿足條件故flag的值為0

......

.此除錯記錄尚不完整,謹慎檢視。

gdb除錯常用命令:

1、   l(list)                 #一次列出10行程式碼(list n,m   #列出n~m行)
2、   r(run)                #執行程式(未設定斷點,將程式執行完畢)
3、   b(break)             #b+行號,在該行設定斷點
4、   c(continue)         #當程式執行時,繼續執行程式,直到遇到斷點
5、   i b(info break)     #檢視斷點資訊
6、   d+編號               #(delete)刪除該斷點(d刪除所有斷點)
7、   clear+行號          #刪除指定行斷點(不加行報錯)
8、   p(print)              #p+變數名,顯示變數的值
9、   s(step)               #單步執行(進入呼叫函式)
10、 n(next)               #不進入呼叫的函式,只在主函式中執行
11、 return/finish        #退出step進入的呼叫函式
12、 q(quit)               #退出gdb除錯