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除錯