2009年7月7日 星期二

gdb常用功能筆記

參考資料來源:RMS's gdb Debugger Tutorial

1.命令列格式:
gdb --args sim-outorder -config ../sa1core.cfg test-math
說明:--args選項會讓gdb把sim-outorder後面跟的argv[]項目傳進被debug的程式sim-outorder

2.gdb常用指令:

run 將目前gdb載入的程式開始執行,直到遇見breakpoint或是觸發watch或是程式自已中斷/結束。
list 顯示程式停止處(breakpoint/watch/或程式本身造成的中止)附近的原始碼。
cont 讓被breakpoint/watch中斷的程式繼續執行。
step 執行1行指令,如果有function call則進入該函式第一行。
next 執行1行指令,如果有function call則完成該函式功能。
kill 將目前gdb載入的程式取消執行,將記憶體內容回復到尚未執行狀態。

break misc.c:20 在原始檔misc.c內的第20行放置breakpoint。
break ruu_fetch 在目前scope內的ruu_fetch()函式入口處放置breakpoint。
watch sim_cycle 在變數sim_cycle放置watch point,任何對該變數的「寫入」都會暫停程式執行。
rwatch 同上,但是觸發條件為「讀取」。
awatch 同上上,但是觸發條件為「讀取或寫入」。
info breakpoints 顯示出所有的breakpoint/watchpoint。
disable 2 關閉表列中的2號breakpoint/watchpoint。

info variables 列出目前scope所可見的global和local變數。
print sim_cycle 印出變數sim_cycle目前的值。
set sim_cycle = 0 將變數sim_cycle的值強制設定為0。
x/s name 以字串模式來顯示name變數的內容,假設name為一字串指標變數(char * name)
x/c name 顯示name指標所指向的第1個字元。
x/4c name 顯示name指標所指向的前4個字元。
x/a name 顯示name變數所內含的位址。
x指令的詳細用法在gdb中使用「help x」可以叫說明。

backtrace 將程式到達目前 breakpoint/watchpoint/或是自行中斷處 之前經過的數個函式呼叫印出來。
frame 2 退回在backtrace所列出來的tace中編號2的frame

沒有留言:

張貼留言