寫C的時候,發生錯誤或結果不如預期,最常用的debug方式是在程式碼的不同區塊安插print,檢查執行時,各階段的程式狀態正確與否。但是當遇到segmentation fault導致程式結束,或是bug需要反覆執行才會出現時,這種方法就不可行。
GDB是一種debugger tool,能夠測試程式執行到某個階段時的狀態,甚至檢查程式碼一行一行的執行。gcc編譯程式碼前要加==-g== flag,開啟debug選項。首先用gdb執行檔案 $ gdb ./exec,這時會進到gdb的interface,目前用過的指令有 ($代表command line prompt)
- 
$ b file:line:設置breakpoints(中斷點),可以指定檔案及行號,當程式執行到此處會暫停。如果沒有設,那程式就會一路執行到結束。
- 
$ d breaknum:移除某個breakpoint,可以用info b看到中斷點資訊
- 
$ run [params]:執行程式,如果有參數直接接在後面
- 
$ c:continue,繼續執行,直到下一個中斷點
- 
$ bt [full]:back-trace,印出目前program stack狀態,會是一層一層的function call,加full能印出local變數
- 
print var: 查看暫停當下某變數的value,可以是global的變數
- 
$ step:處於中斷時,執行下一行程式碼,如果遇到function(一個frame),則會進去一行一行執行
- 
$ next:處於中斷時,執行下一行程式碼,如果遇到function,則跳過,直接執行完
- 
$ up:返回stack的上一層
由於breakpoint能在程式還沒run以前或是處於暫停狀態的時候設置,所以當我們猜測下一個中斷點前錯誤會發生,可以再此次中斷另外設置其他breakpoints。再step或next,一步步檢查程式碼。