Ubuntu下GDB除錯C語言程式
轉自:http://zhgeaits.me/other/2013/03/17/gdb-study-notes.html,感謝博主。
1.GDB是什麼
GDB是GNU開源組織釋出的一個UNIX下的程式除錯工具,專門用來除錯C,C++這些程式的了,而且都是命令列模式的。
2.準備工作
平時我們在IDE開發得時候,必須在執行的時候選擇debug模式,否則斷點就無效了。因此,在用gcc編譯的時候也是需要一些編譯引數的。
2.1編譯
使用GCC編譯時要新增-g選項來把原始碼編譯進去,這樣除錯就可以看到原始碼了,否則除錯很不方便,很多命令用不了。例如:
gcc helloword.c -o helloword -g
2.2執行除錯
gdb helloword //也可以直接執行gdb,再使用命令file載入程式。
3.常用操作命令
3.1顯示程式碼
l命令(list的縮寫,直接list也可以)顯示下10行程式碼,加一個行號引數則顯示該行號開始的10行程式碼,如:
l 3
加兩個引數,則顯示兩個行號之間的程式碼,如:
l 20, 30
3.2設定斷點
b(break的縮寫,直接break也可以),可以指定行號,也可以指定函式,例如b 11, 或者break main.
3.3檢視和刪除斷點
info break(i b也可以)可以檢視當前設定的斷點
clear linenumber 可以刪除指定行的斷點
Delete breaknumber 可以刪除指定斷點編號的斷點
3.4執行程式
r(run的縮寫,也可以直接run)就能跑程式,如果你的程式需要讀取引數,可以在後面新增引數
3.5單行執行
n(next的縮寫,也可以直接next),執行一行程式碼,就是step over的意思。如果設定有斷點,程式執行停在斷點行,然後輸入n,就可以step over了。
3.6跟蹤進入(步入)
s(step的縮寫,也可以直接step)命令相當於step into, 如果停在了函式行,那麼就可以輸入s,進入該函數了。
3.7列印變數
p 變數名,就可以列印變數的值了,例如 print a。也可以print 表示式,而且表示式可以修改變數的值。
3.8繼續執行
c(continue的縮寫),相當於IDE上面的三角行執行按鈕,直接執行到下一個斷點或者結束。
3.9檢視堆疊
bt(backtrace的縮寫,也可以直接backbrace),可以檢視堆疊情況,對於進入某個函式的時候特別有用,可以看到函式引數的值變化。
3.10退出函式
finish退出函式除錯,還是聽方便的。
3.11執行緒除錯
Info threads可以顯示當前的執行緒,帶星號的是當前除錯的執行緒,即活動執行緒,其他執行緒的輸出結果看不到,必須切換。
thread number可以切換到指定號碼的執行緒進行除錯。
3.12退出
q(quit)退出
4.其他
4.1幫助
Help command,help加任何一個命令就可以看到該命令的所有用法了。
4.2與VIM整合
這個需要重新編譯vim,有點麻煩,先用原生的,用熟悉再說
4.3更多
以上是簡單的應用,足夠了,以後遇到問題需要更多的話再去man gdb和看官網