GDB使用

GDB 常用命令參考手冊

 

 

GDB 命令行參數

啓動 GDB:

  • gdb executable
  • gdb -e executable -c core-file
  • gdb executable -pid process-id
    (使用命令 'ps -auxw' 可以查看進程的 pid)
選項含義
--help
-h
列出命令行參數。
--exec=file
-e file
指定可執行文件。
--core=core-file
-c core-file
指明 core 文件。
--command=file
-x file
從指定文件中讀取 gdb 命令。
--directory=directory
-d directory
把指定目錄加入到源文件搜索路徑中。
--cd=directory 以指定目錄作爲當前路徑來運行 gdb 。
--nx
-n
不要執行 .gdbinit 文件中的命令。默認情況下,這個文件中的命令會在所有命令行參數處理完後被執行。
--batch 在非交互模式下運行 gdb 。從文件中讀取命令,所以需要 -x 選項。
--symbols=file
-s file
從指定文件中讀取符號表。
-write 允許對可執行文件和 core 文件進行寫操作。
--quiet
-q
不要打印介紹和版權信息。
--tty=device 指定 device 爲運行程序的標準輸入輸出。
--pid=process-id
-p process-id
指定要附屬的進程 ID 。

 

GDB 命令

GDB 中使用的命令:

 

命令描述
help 列出 gdb 幫助信息。
help topic 列出相關話題中的 gdb 命令。
help command 列出命令描述信息。
apropos search-word 搜索相關的話題。
info args
i args
列出運行程序的命令行參數。
info breakpoints 列出斷點。
info break 列出斷點號。
info break breakpoint-number 列出指定斷點的信息。
info watchpoints 列出觀察點。
info registers 列出使用的寄存器。
info threads 列出當前的線程。
info set 列出可以設置的選項。
Break and Watch
break funtion
break line-number
在指定的函數,或者行號處設置斷點。
break +offset
break -offset
在當前停留的地方前面或後面的幾行處設置斷點。
break file:func 在指定的file文件中的func處設置斷點。
break file:nth 在指定的file文件中的第nth行設置斷點。
break *address 在指定的地址處設置斷點。一般在沒有源代碼時使用。
break line-number if condition 如果條件滿足,在指定位置設置斷點。
break line thread thread-number 在指定的線程中中斷。使用info threads可以顯示線程號。
tbreak 設置臨時的斷點。中斷一次後斷點會被刪除。
watch condition 當條件滿足時設置觀察點。
clear
clear func
clear nth
清除函數func處的斷點。
清除第nth行處的斷點。
delete
d
刪除所有的斷點或觀察點。
delete breakpoint-number
delete range
刪除指定的斷點,觀察點。
disable breakpoint-number-or-range
enable breakpoint-number-or-range
不刪除斷點,僅僅把它設置爲無效,或有效。
例子:
顯示斷點: info break
設置無效: disable 2-9
enable once breakpoint-number 設置指定斷點有效,當到達斷點時置爲無效。
enable del breakpoint-number 設置指定斷點有效,當到達斷點時刪除它。
finish 繼續執行到函數結束。
Line Execution
step
s
step number-of-steps-to-perform
進入下一行代碼的執行,會進入函數內部。
next
n
next number
執行下一行代碼。但不會進入函數內部。
until
until line-number
繼續運行直到到達指定行號,或者函數,地址等。
return
return expression
彈出選中的棧幀(stack frame)。如果後面指定參數,則返回表達式的值。
stepi
si
nexti
ni
執行下一條彙編/CPU指令。
info signals
info handle
handle SIGNAL-NAME option
當收到信號時執行下列動作:nostop(不要停止程序),stop(停止程序執行),print(顯示信號),noprint(不顯示),pass/noignore(允許程序處理信號),nopass/ignore(不讓程序接受信號)
where 顯示當前的行號和所處的函數。
Program Stack
backtrace
bt
bt inner-function-nesting-depth
bt -outer-function-nesting-depth
顯示當前堆棧的追蹤,當前所在的函數。
backtrace full 打印所有局部變量的值。
frame number
f number
選擇指定的棧幀。
up number
down number
向上或向下移動指定個數的棧幀。
info frame addr 描述選中的棧幀。
info args
info all-reg
info locals
info catch
顯示選中棧幀的參數,局部變量,異常處理函數。all-reg也會列出浮點寄存器。
Source Code
list
l
list line-number
list function
list -
list start#,end#
list filename:function
列出相應的源代碼。
set listsize count
show listsize
設置list命令打印源代碼時的行數。
directory directory-name
dir directory-name
show directories
在源代碼路徑前添加指定的目錄。
directory 當後面沒有參數時,清除源代碼目錄。
Examine Variables
print variable
p variable
p file::variable
p 'file'::variable
打印指定變量的值。
p *array-var@length 打印arrary-var中的前length項。
p/x var 以十六進制打印整數變量var
p/d var 把變量var當作有符號整數打印。
p/u var 把變量var作爲無符號整數打印。
p/o var 把變量var作爲八進制數打印。
p/t var
x/b address
x/b &variable
以整數二進制的形式打印var變量的值。
p/c variable 當字符打印。
p/f variable 以浮點數格式打印變量var
p/a variable 打印十六進制形式的地址。
x/w address
x/4b &variable
打印指定的地址,以四字節一組的方式。
call expression 類似於print,但不打印 void 。
disassem addr 對指定地址中的指令進行反彙編。
Controlling GDB
set gdb-option value 設置 GDB 的選項。
set print array on
set print array off
show print array
以可讀形式打印數組。默認是 off 。
set print array-indexes on
set print array-indexes off
show print array-indexes
打印數組元素的下標。默認是 off 。
set print pretty on
set print pretty off
show print pretty
格式化打印 C 結構體的輸出。
set print union on
set print union off
show print union
打印 C 中的聯合體。默認是 on 。
set print demangle on
set print demangle off
show print demangle
控制 C++ 中名字的打印。默認是 on 。
Working Files
info files
info share
列出當前的文件,共享庫。
file file file當作調試的程序。如果沒指定參數,丟棄。
core file file當作 core 文件。如果沒指定參數,則丟棄。
exec file file當作執行程序。如果沒指定參數,則丟棄。
symbol file file中讀取符號表。如果沒指定參數,則丟棄。
load file 動態鏈入file文件,並讀取它的符號表。
path directory 把目錄directory加入到搜索可執行文件和符號文件的路徑中。
Start and Stop
run
r
run command-line-arguments
run < infile > outfile
從頭開始執行程序,也允許進行重定向。
continue
c
繼續執行直到下一個斷點或觀察點。
continue number 繼續執行,但會忽略當前的斷點number次。當斷點在循環中時非常有用。
kill 停止程序執行。
quit
q
退出 GDB 調試器。

 

GDB 操作提示

 

  • 在編譯可執行文件時需要給 gcc 加上 "-g" 選項,這樣它纔會爲生成的可執行文件加入額外的調試信息。
  • 不要使用編譯器的優化選項,比如: "-O","-O2"。因爲編譯器會爲了優化而改變程序流程,那樣不利於調試。
  • 在 GDB 中執行 shell 命令可以使用:shell command
  • GDB 命令可以使用 TAB 鍵來補全。按兩次 TAB 鍵可以看到所有可能的匹配。
  • GDB 命令縮寫:例如 info bre 中的 bre 相當於 breakpoints
  • GDB 在 Emacs 中的操作:
emacs 按鍵動作
M-x gdb 切換到 gdb 模式。
C-h m 顯示 gdb 模式介紹信息。
M-s 等同於gdb 中的 step 命令。
M-n 等同於gdb 中的 next 命令。
M-i 等同於gdb 中的 stepi 命令。
C-c C-f 等同於gdb 中的 finish 命令。
M-c 等同於gdb 中的 continue 命令。
M-u 等同於gdb 中的 up 命令。
M-d 等同於gdb 中的 down 命令。

 

GDB 相關手冊:

 

  • gdb - GNU debugger
  • ld - The GNU linker
  • gcc/g++ - GNU project C and C++ compiler

 

相關鏈接:

 

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