第03課:GDB常用的調試命令概覽
先給出一個常用命令的列表,後面結合具體的例子詳細介紹每個命令的用法。
命令名稱 命令縮寫 命令說明
run r 運行一個程序
continue c 讓暫停的程序繼續運行
next n 運行到下一行
step s 如果有調用函數,進入調用函數內部,相當於step into
until u 運行到指定行停下來
finish fi 結束當前調用函數,到上一層函數調用處
return return 結束當前調用函數並返回指定值,到上一層函數調用處
print p 打印變量或寄存器值
backtrace bt 查看當前線程的調用堆棧
frame f 切換到當前調用線程的制定堆棧,具體堆棧通過堆棧序號指定
thread thread 切換到指定線程
break b 添加斷點
tbreak tb 添加臨時斷點
delete del 刪除斷點
enable enable 啟動某個斷點
disable disable 禁用某個斷點
watch watch 監聽某一個變量或內存地址的值是否發生變化
list l 顯示源碼
info info 查看斷點/線程等信息
ptype ptype 查看變量類型
disassemble dis 查看匯編代碼
set args 設置程序啟動命令行參數
show args 查看設置的命令行參數
上面只列了一些常見的命令,對於一些不常見的命令(如file命令)就不列舉了,不建議可以記憶這些命令,因為確實有點多,找幾個程序代碼實際聯系一下很快就能記住,至於要不要采用,大家還是根據自己的學習習慣來。當GDB輸入命令時,對於一個命令可以縮寫成什麽樣子,只需要遵循如下兩個規則即可。
---一個命令縮寫時不能出現多個選擇,否則GDB就不知道對應哪個命令了。舉個例子,輸入th,那麽th對應的命令有thread和thbreak,這樣GDB就不知道哪個了,需要更具體的輸入,GDB才能識別。
---GDB有些命令雖然也對應多個選擇,但是有些命令的簡寫是有規定的,例如,r就是命令‘run’的簡寫,雖然輸入‘r‘時,你的本意可能是’return‘命令。
總之,如果記不清楚,可以直接使用命令全稱,每個命令都是很常見的英文單詞,通俗易懂不難記憶。
如果還不熟悉GDB調試,建議認真閱讀以下文章。
第03課:GDB常用的調試命令概覽