GDB常用命令

2022-07-05 02:33:15 字數 2688 閱讀 6583

啟動和停止:

gdb //使用gdb除錯program可執行檔案,注意在編譯時gcc要加入-g引數。

gdb core //用 gdb 同時除錯乙個執行程式和 core 檔案,core 是程式異常終止後 core dump 後產生的檔案。

gdb //如果你的程式是乙個服務程式,那麼你可以指定這個服務程式執行時的程序 id。gdb 會自動attach 上去,並除錯他。program 應該在 path 環境變數中搜尋得到。

run或r  //執行程式(在此給出命令列引數)

kill  //停止程式

顯示**:

list==l

list//顯示程式第linenum行周圍的程式

list//顯示函式名為function的函式的源程式

list  //顯示當前行後面的源程式

list-  //顯示當前行前面的源程式

斷點:

break == b

break //在函式function入口處設定斷點

break //在指定行號停住

break *addreee  //在位址address處停止

break thread //linespc指定了斷點在源程式的行號。threadno指定了執行緒id。注意,這個id是執行緒id是gdb分配的,你可以通過「info threads"命令檢視正在執行中的執行緒資訊。如果不指定thread則表示你的斷點設在所有執行緒上面。

info break[n]或info breakpoints[n]  //檢視斷點資訊, n表示斷點號。如果不加n表示檢視所有斷點資訊。

delete[breakpoints][range]       //刪除指定的斷點,breakpoints為斷點號,如果不指定斷點號,則表示刪除所有的斷點。range表示斷點號的範圍(如:3-7)。其簡寫命令為d。

恢復程式執行和單步除錯:

step或s//單步跟蹤,如果有函式呼叫,他會進入該函式。進入函式的前提是,此函式被編譯有 debug 資訊。很像 vc 等工具中的 step in。後面可以加 count 也可以不加,不加表示一條條地執行,加表示執行後面的 count 條指令,然後再停住。

next或n//同樣單步跟蹤,如果有函式呼叫,他不會進入該函式。很像 vc 等工具中的 step over。後面可以加 count 也可以不加,不加表示一條條地執行,加表示執行後面的 count 條指令,然後再停住。  

finish  //執行程式,直到當前函式完成返回。並列印函式返回時的堆疊位址和返回值及引數值等資訊。

until 或 u  //當你厭倦了在乙個迴圈體內單步跟蹤時,這個命令可以執行程式直到退出迴圈體。

輸出:

print == p

print $eax  //以十進位制輸出%eax的內容

print  /x //以十六進製制輸出variable的內容

print  /t //以二進位制輸出variable的內容

print  /o //以八進位制方式輸出變數variable內容

print  /c //按字元格式顯示variable

print  /f //按浮點數格式顯示variable

print 0x100  //輸出0x100的十進位制表示

print /x ($ebp + 8)  //以十六進製制輸出%ebpd 內容加上8

print *(int*) 0xfff076b0  //輸出位於位址0xfff076b0

print *(int*) ($ebp+8)  //輸出位於位址%ebp+8處的整數

x/2w 0xfff0760b0  //檢查從位址0xfff076b0開始的雙字

x/20b sum  //檢查函式sum的前20個位元組

p *a@len  //陣列的全部元素,a是陣列名,len是陣列元素的個數。如果是靜態陣列的話,可以直接用 print 陣列名,就可以顯示陣列中所有資料的內容了。

檢查**

disas  //反彙編當前函式

disas sum  //反彙編函式sum 

disas 0x8048394 0x80483a4  //反彙編指定位址範圍內的**

檢視堆疊資訊:

backtrace或bt  //檢視函式堆疊 

backtrace或bt//n是乙個正整數,表示只列印棧頂上n層的棧資訊;-n表示乙個負整數,表示只列印棧底下n層

frame或f  //列印當前棧層的資訊:棧的層編號,當前的函式名,函式引數值,函式所在檔案及行號,函式執行到的語句

info args  //列印當前函式的引數名及其值

info locals  //列印當前函式所有區域性變數及其值

info catch  // 列印出當前的函式中的異常處理資訊

多執行緒:

info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。 前面有的是當前除錯的執行緒。

thread id切換當前除錯的執行緒為指定id的執行緒。

gdb常用命令

gnu的偵錯程式稱為gdb,是乙個互動式的程式,工作在字元模式。其常用命令如下 break num 在指定的行上設定斷點 break 1 bt 顯示函式的呼叫順序 clear 刪除斷點 clear test.c 10 display expr 每次程式停止後顯示表示式的值 printf expr顯示...

GDB常用命令

1 執行 run2 單步執行 step next finish 一直執行到函式返回 until 執行到某一行 3 斷點 break args break 12 break 10 hbreak args 硬體輔助斷點 thbreak args rbreak args info breakpoints ...

gdb 常用命令

呼叫gdb編譯需要在cc後面加 g引數再加 o root redhat home gdb 除錯檔案 啟動gdb gdb l 字母l 從第一行開始列出原始碼 gdb break n 在第n行處設定斷點 gdb break func 在函式func 的入口處設定斷點 gdb info break 檢視斷...