用gdb除錯程式時,常常很困惑一些命令的使用,要麼是不知道這個命令,要麼忘了命令的使用方法。
呵呵,有時迷茫了自己處在什麼堆疊的深處,這是使用where命令能夠清晰的看到自己的位置,有時在迴圈太多讓人受不了了,可使用u或者finish或者jump命令來跳出去。
gdb常用:
run 啟動程式執行
next 單步執行(不到函式內部)
step 單步執行,跟蹤到函式內部
finish 繼續執行,直到當前函式結束
continue 繼續執行,直到下乙個斷點
jump 9 直接跳到指定行
list 顯示原始碼
l 3,10 顯示特定範圍的原始碼 l main顯示函式的原始碼
set listsize 50 修改原始碼顯示行數
break 設定斷點
b main設定函式斷點
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 顯示函式變數
info registers 顯示暫存器資料
thread 2 切換執行緒
where 檢視呼叫堆疊(bt 或者 info s)
frame 檢視當前堆疊幀
frame 8 檢視指定堆疊幀資訊
info frame 檢視當前堆疊幀更詳細的資訊
print a 列印變數資訊
print/x a 十六進製制輸出變數資訊
print a + b 可以進行表示式計算
print $eax 顯示某個暫存器的資料
x/nfu 0×300098 顯示指定位址的記憶體資料
n 顯示記憶體單位,長度
f 格式(除了 print 格式外,還有 字串s 和 彙編 i)
u 記憶體單位(b: 1位元組; h: 2位元組; w: 4位元組; g: 8位元組)
set vairiable a = 100 可以修改變數的值
commands 指定到了特定斷點後執行的命令序列
whatis buf 顯示變數的型別
dump memory 輸出檔名 記憶體起始位址 記憶體終止位址
restore 檔名 binary 起始位置
watch buf buf的值一旦改變,會觸發watchpoint
奇淫技巧:
cat ~/.gbinit gdb會從這個檔案讀取配置
cat ~/.gdb_history
呵呵,對於gdb時想要檢視長的字串老是顯示不全,怎麼半呢,gdb參看陣列字串時預設只是顯示部分的資料,通過這個命令可以修改:
set print elements 0 預設這裡設定是200,設定為0表示沒有限制
還有其它一些set命令可以試試:
set print address
set print address on
開啟位址輸出,當程式顯示函式資訊時,gdb會顯出函式的引數位址。系統預設為開啟的
set print object
在c++中,如果乙個物件指標指向其派生類,如果開啟這個選項,gdb會自動按照虛方法呼叫的規則顯示輸出,如果關閉這個選項的話,gdb就不管虛函式表了。這個選項預設是off
show print pretty
檢視gdb是如何顯示結構體的
set print array
set print array on
開啟陣列顯示,開啟後當陣列顯示時,每個元素佔一行,如果不開啟的話,每個元素則以逗號分隔。這個選項預設是關閉的
set print null-stop
如果開啟了這個選項,那麼當顯示字串時,遇到結束符則停止顯示。這個選項預設為off
set print pretty on
如果開啟printf pretty這個選項,那麼當gdb顯示結構體時會比較漂亮
set print union
設定顯示結構體時,是否顯式其內的聯合體資料。例如有以下資料結構
p string+n顯示偏移n後的字串內容,這個使用起來也是比較方便的
Linux下的gdb的常用除錯命令
linux下有乙個強大的除錯工具gdb,gdb可以除錯c c d go python pascal assemble ansi 彙編標準 等等程式語言。課件gdb除錯工具的強大。在此總結了gdb除錯c語言常用的一些命令。一般來說,gdb主要幫忙你完成下面四個方面的功能 1 啟動你的程式,可以按照你的...
linux下的gdb除錯
如果編譯時,增加了引數 g,就會生成帶源 除錯符號的可執行檔案。增加的除錯符號一般會使檔案變的大一點。gcc o xx xx.c g 進一步地,就可以執行下面的指令啟動除錯工具進入除錯環境對程式進行除錯了。gdb xx 在除錯環境下,可以輸入下列指令來控制除錯。l n第乙個字母是小寫的l,列出第n行...
linux下的gdb除錯
在看gdb除錯多執行緒多程序之前,我們先來回顧一下gdb除錯的一些基本命令 首先vim乙個檔案,然後進行編譯用命令 gcc o test 所要生成的檔案 test1 你剛剛寫的檔案 g 檢查沒有問題後,再gdb test對你寫的檔案進行除錯。進入gdb後,有這些命令可以用 b 行號 表示在哪一行打了...