linux下gdb常用的調試命令--by流氓兔斯基
用gdb調試程序時,常常很困惑一些命令的使用,,要么是不知道這個命令,,要么忘了命令的使用方法。
呵呵,,有時迷茫了自己處在什么堆棧的深處,,這是使用where命令能夠清晰的看到自己的位置,有時在循環(huán)太多讓人受不了了,,可使用u或者finish或者jump命令來跳出去,。
gdb常用:
run 啟動程序運行
next 單步執(zhí)行(不到函數(shù)內部)
step 單步執(zhí)行,跟蹤到函數(shù)內部
finish 繼續(xù)執(zhí)行,,直到當前函數(shù)結束
continue 繼續(xù)執(zhí)行,,直到下一個斷點
jump 9 直接跳到指定行
list 顯示源碼
l 3,10 顯示特定范圍的源碼 l main顯示函數(shù)的源碼
set listsize 50 修改源碼顯示行數(shù)
break 設置斷點
b main設置函數(shù)斷點
b 9 設置指定行斷點
b 將下一行設置為斷點
b test if a == 10 設置條件斷點
delete 刪除斷點
d 3 刪除指定的斷點
condition 修改條件 condition 4 a == 90
info 查看信息
info threads 查看線程信息
info breakpoints 查看斷點信息
info locals 顯示局部變量
info args 顯示函數(shù)變量
info registers 顯示寄存器數(shù)據(jù)
thread 2 切換線程
where 查看調用堆棧(bt 或者 info s)
frame 查看當前堆棧幀
frame 8 查看指定堆棧幀信息
info frame 查看當前堆棧幀更詳細的信息
print a 打印變量信息
print/x a 十六進制輸出變量信息
print a + b 可以進行表達式計算
print $eax 顯示某個寄存器的數(shù)據(jù)
x/nfu 0×300098 顯示指定地址的內存數(shù)據(jù)
n 顯示內存單位,,長度
f 格式(除了 print 格式外,,還有 字符串s 和 匯編 i)
u 內存單位(b: 1字節(jié); h: 2字節(jié); w: 4字節(jié); g: 8字節(jié))
set vairiable a = 100 可以修改變量的值
commands 指定到了特定斷點后執(zhí)行的命令序列
whatis buf 顯示變量的類型
dump memory 輸出文件名 內存起始地址 內存終止地址
restore 文件名 binary 起始位置
watch buf buf的值一旦改變,會觸發(fā)watchpoint
奇淫技巧:
cat ~/.gbinit gdb會從這個文件讀取配置
cat ~/.gdb_history
呵呵,,對于gdb時想要查看長的字符串老是顯示不全,,怎么半呢,gdb參看數(shù)組字符串時默認只是顯示部分的數(shù)據(jù),,通過這個命令可以修改:
set print elements 0 默認這里設置是200,,設置為0表示沒有限制
還有其它一些set命令可以試試:
set print address
set print address on
打開地址輸出,當程序顯示函數(shù)信息時,,GDB會顯出函數(shù)的參數(shù)地址,。系統(tǒng)默認為打開的
set print object <on/off>
在C++中,如果一個對象指針指向其派生類,,如果打開這個選項,,GDB會自動按照虛方法調用的規(guī)則顯示輸出,如果關閉這個選項的話,,GDB就不管虛函數(shù)表了,。這個選項默認是off
show print pretty
查看GDB是如何顯示結構體的
set print array
set print array on
打開數(shù)組顯示,打開后當數(shù)組顯示時,,每個元素占一行,,如果不打開的話,每個元素則以逗號分隔,。這個選項默認是關閉的
set print null-stop <on/off>
如果打開了這個選項,,那么當顯示字符串時,遇到結束符則停止顯示,。這個選項默認為off
set print pretty on
如果打開printf pretty這個選項,,那么當GDB顯示結構體時會比較漂亮
set print union <on/off>
設置顯示結構體時,是否顯式其內的聯(lián)合體數(shù)據(jù),。例如有以下數(shù)據(jù)結構
p string+n顯示偏移n后的字符串內容,,這個使用起來也是比較方便的