GDB常用命令(簡化版,不帶例子)

GDB常用命令

info reg查看寄存器狀態。

info locals查看局部變量

info line n:顯示第n行代碼在內存中的對應位置

r:運行

n單步執行

s單步調試可以跟蹤進函數。

c:繼續運行

b n:在第n行設置斷點

info b:顯示所有斷點

clear n清除第n行斷點

clear清除所有斷點

list <linenum>:顯示程序第linenum行周圍的源程序

list <function>:顯示函數名爲function的函數的源程序

list:顯示當前行後面的源程序。

list - :顯示當前行前面的源程序。

print <expr>

print /<f> <expr>

<expr>是表達式,是被調試的程序中的表達式,<f>是輸出的格式,比如,如果要把表達式按16進制的格式輸出,那麼就是/x

watch <expr>:一般來觀察某個表達式(變量也是一種表達式)的值是否有變化了,如果有變化,馬上停住程序。

disassemble:命令用於反彙編,它可被用來查看當前執行時的源代碼的機器碼,其實際上只是把目前內存中的指令dump出來。下面的示例用於查看函數func的彙編代碼:

(gdb) disassemble func

btBacktrace:打印當前的函數調用棧的所有信息。如:

        (gdb) bt

        #0 func (n=250) at tst.c:6

        #1 0x08048524 in main (argc=1, argv=0xbffff674) at tst.c:30

        #2 0x400409ed in __libc_start_main () from /lib/libc.so.6       

從上可以看出函數的調用棧信息:__libc_start_main --> main() --> func()   

backtrace <n> bt <n> n是一個正整數,表示只打印棧頂上n層的棧信息。

frame f查看當前棧層的信息,會打印出這些信息:棧的層編號,當前的函數名,函數參數值,函數所在文件及行號,函數執行到的語句。

info frameinfo f 這個命令會打印出更爲詳細的當前棧層的信息,只不過,大多數都是運行時的內內地址。比如:函數地址,調用函數的地址,被調用函數的地址,目前的函數是由什麼樣的程序語言寫成的、函數參數地址及值、局部變量的地址等等。如:

           (gdb) info f

           Stack level 0, frame at 0xbffff5d4:

             eip = 0x804845d in func (tst.c:6); saved eip 0x8048524

             called by frame at 0xbffff60c

             source language c.

             Arglist at 0xbffff5d4, args: n=250

             Locals at 0xbffff5d4, Previous frame's sp is 0x0

             Saved registers:

             ebp at 0xbffff5d4, eip at 0xbffff5d8             

info args:打印出當前函數的參數名及其值。

x /nfu 0x<addr>查看內存地址中的值。

l  n表示要顯示的內存單元的個數

l  f表示顯示方式, 可取如下值

u  x 按十六進制格式顯示變量。

u  d 按十進制格式顯示變量。

u  u 按十進制格式顯示無符號整型。

u  按八進制格式顯示變量。

u  t 按二進制格式顯示變量。

u  a 按十六進制格式顯示變量。

u  i 指令地址格式

u  c 按字符格式顯示變量。

u  f 按浮點數格式顯示變量。

l  u表示一個地址單元的長度

u  b表示單字節,

u  h表示雙字節,

u  w表示四字節,

u  g表示八字節

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章