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-9enable 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 相關手冊:
相關鏈接: