在原來的的選項上再加上 -g 選項,如 gcc -g -wall -o2 -o test test.c 或者 gcc -g -o test test.c。有一點需要注意的是除錯時最好去掉優化選項,比如內聯(inline)函式
優化(去掉函式呼叫,而將函式**在呼叫的位置展開),該函式名上就無法設定斷點。這是因為內聯函式優化從目標檔案中去掉了該函式的入口點,符號表中也沒有該函式的名稱。優化還
會將區域性變數儲存到暫存器中,因此無法顯示該區域性變數的內容,必須直接檢視暫存器的值。當然,如果程式確實需要優化那麼還是應該直接除錯帶有優化選項的可執行檔案版本,因為只管
理優化了的版本的可執行檔案比管理優化的+沒有優化的兩個版本的可執行檔案更加簡單。
2、1 gdb 可執行檔名。 如,gdb test 或 gdb test.exe
2、2 先鍵入 gdb 然後 file test 或 file test.exe
設定斷點命令為 break ,可以簡寫為 b 。格式:
break 函式名,如 break main
break 行號,如 break 100
break 檔名:行號,如 break test.c:100
break 檔名:函式名,如 break test.c:tet
break +偏移量 如 break +100
break -偏移量 如 break -100
break *位址 如 break *0x08116fd6
break (即不指定斷點位置),在下一行**上設定斷點,如 break
info break
delete 3//刪除第三個斷點
clear //清楚所有斷點
沒有引數時: run
有引數時: run 引數,如 run hello 。注意,此時引數從 argv[1] 開始,因為在執行 gdb test 或 file test時就傳入了第乙個引數argv[0]。
backtrace命令可以在遇到斷點而暫停執行時顯示棧幀,可簡寫為bt。此外backtrace的別名還有where和info stack。
backtrace
backtrace n,如 backtrace 3 只顯示前3個棧幀
backtrace -n,如backtrace -3 只顯示最後3個棧幀
backtrace full//顯示所有棧幀及其區域性變數
backtrace full n//顯示前 n 個棧幀及其區域性變數
backtrace full -n//顯示最後 n 棧幀及其區域性變數
print命令可以顯示變數,同時可以簡寫為 p 。用法如下:
p argv
p *argv
p argv[0]
p argv[1]
info reg
p $eax//即在暫存器名前面加上$即可
用 x 命令可以顯示記憶體中內容。其一般格式為:
x/nfu addr。
nfu是可選的,如果採用預設的nfu就可以不需要加斜線「\」
n,重複的次數
重複數是十進位制整數,預設為1。他確定顯示多少單元記憶體(單元由 u 確定)
f,顯示格式
顯示格式是被print命令使用眾多格式之一('x','d','u','o','t','a','c','f','s')另外還有'i'(機器指令)。最初預設的是'x'(16進製制)。在你每次使用 x 或者 print 命令
之後預設值都會隨之發生改變。
u,單位大小
單位大小可以是一下任何之一:
bbytes
hhalfwords(two bytes)
wwords(four bytes).最初的預設值。
ggiant words(eight bytes)
對於格式 'i' ,單位大小是被忽視了的而且通常不寫。
addr,開始顯示的位址
addr是你想gdb顯示記憶體內容的開始位址。該表示式沒必要必須是乙個指標值(雖然他可能是);他始終被表述為乙個位元組記憶體的整型位址。
例如'x/3uh 0x54320'命令表示顯示從位址0x54320開始的以無符號十進位制數的3個半字的內容。
反彙編命令為disassemble,簡寫為disas。
disassemble。---- 反彙編當前整個函式。
disassemble 程式計數器。--- 反彙編以程式計數器值為位址所在的函式。
disassemble 開始位址 結束位址。--- 反彙編從開始位址到結束位址之前的部分。執行時可能想執行到函式內部,此時可以使用 (step 簡寫為 p)命令。
單步執行的意思是根據源**一行一行的執行。執行源**中一行的命令為 next (簡寫為n)
除錯時,可以使用continue(簡寫為 c )命令繼續執行程式。程式在遇到斷點後再次暫停執行。如果沒有斷點就會一直執行到就會一直執行到結束。格式:
continue
continue 次數 //忽略斷點的次數
大型軟體或者大量使用指標的程式中,很難弄清楚變數在什麼地方被改變。想要找到變數在何處被改變,可以使用watch命令(監視點,watchpoint)。
wath 《表示式》。《表示式》發生變化時暫停執行。此處《表示式》的意思是常量或者變數。
awatch 《表示式》。《表示式》被訪問、改變時暫停執行。
rwatch 《表示式》。《表示式》被訪問是暫停執行。
格式:set variable 《變數》=《表示式》。例如,set variable i = 0 。
GDB基本用法
相關 gdb的使用 當程式出錯並產生core 時 快速定位出錯函式的辦法 gdb 程式名 core檔名 一般是core,也可能是core.x 除錯程式使用的鍵 r run 執行.程式還沒有執行前使用 c cuntinue 繼續執行。執行中斷後繼續執行 q 退出 kill 終止除錯的程式 h help...
gdb 基本用法小結
1.當程式出錯並產生core 時快速定位出錯函式的辦法 gdb 程式名 core檔名 一般是core,也可能是core.x 2.除錯程式使用的鍵 rrun 執行.程式還沒有執行前使用 c cuntinue 執行到下一斷點處 qquit 退出tab tab命令補全功能 h help幫助s step 跟...
GDB的基本用法
本文參考 debug hacks 一書所作 每天進步一點點。一.準備 通過 gcc 的 g 選項生成除錯資訊。gcc wall o2 g 原始檔 g選項可以使用僅可gdb使用的一些附加除錯資訊 這些附加資訊可以使gdb工作的更好,但是也可能令其他偵錯程式崩潰或者不能讀該檔案。二.gdb基本用法 啟動...