啟動(dòng) GDB:
l gdb executable
l gdb -e executable -c core-file
l gdb executable -pid process-id
(使用命令 'ps -auxw' 可以查看進(jìn)程的 pid)
選項 | 含義 |
–help | 列出命令行參數。 |
–exec=file | 指定可執行文件。 |
–core=core-file | 指明 core 文件。 |
–command=file | 從指定文件中讀取 gdb 命令。 |
–directory=directory | 把指定目錄加入到源文件搜索路徑中。 |
–cd=directory | 以指定目錄作為當前路徑來(lái)運行 gdb 。 |
–nx | 不要執行 .gdbinit 文件中的命令。默認情況下,這個(gè)文件中的命令會(huì )在所有命令行參數處理完后被執行。 |
–batch | 在非交互模式下運行 gdb 。從文件中讀取命令,所以需要 -x 選項。 |
–symbols=file | 從指定文件中讀取符號表。 |
-write | 允許對可執行文件和 core 文件進(jìn)行寫(xiě)操作。 |
–quiet | 不要打印介紹和版權信息。 |
–tty=device | 指定 device 為運行程序的標準輸入輸出。 |
–pid=process-id | 指定要附屬的進(jìn)程 ID 。 |
GDB 中使用的命令:
命令 | 描述 |
help | 列出 gdb 幫助信息。 |
help topic | 列出相關(guān)話(huà)題中的 gdb 命令。 |
help command | 列出命令描述信息。 |
apropos search-word | 搜索相關(guān)的話(huà)題。 |
info args | 列出運行程序的命令行參數。 |
info breakpoints | 列出斷點(diǎn)。 |
info break | 列出斷點(diǎn)號。 |
info break breakpoint-number | 列出指定斷點(diǎn)的信息。 |
info watchpoints | 列出觀(guān)察點(diǎn)。 |
info registers | 列出使用的寄存器。 |
info threads | 列出當前的線(xiàn)程。 |
info set | 列出可以設置的選項。 |
Break and Watch | |
break funtion | 在指定的函數,或者行號處設置斷點(diǎn)。 |
break +offset | 在當前停留的地方前面或后面的幾行處設置斷點(diǎn)。 |
break file:func | 在指定的file文件中的func處設置斷點(diǎn)。 |
break file:nth | 在指定的file文件中的第nth行設置斷點(diǎn)。 |
break *address | 在指定的地址處設置斷點(diǎn)。一般在沒(méi)有源代碼時(shí)使用。 |
break line-number ifcondition | 如果條件滿(mǎn)足,在指定位置設置斷點(diǎn)。 |
break line threadthread-number | 在指定的線(xiàn)程中中斷。使用info threads可以顯示線(xiàn)程號。 |
tbreak | 設置臨時(shí)的斷點(diǎn)。中斷一次后斷點(diǎn)會(huì )被刪除。 |
watch condition | 當條件滿(mǎn)足時(shí)設置觀(guān)察點(diǎn)。 |
clear | 清除函數func處的斷點(diǎn)。 |
delete | 刪除所有的斷點(diǎn)或觀(guān)察點(diǎn)。 |
delete breakpoint-number | 刪除指定的斷點(diǎn),觀(guān)察點(diǎn)。 |
disable breakpoint-number-or-range | 不刪除斷點(diǎn),僅僅把它設置為無(wú)效,或有效。 |
enable oncebreakpoint-number | 設置指定斷點(diǎn)有效,當到達斷點(diǎn)時(shí)置為無(wú)效。 |
enable del breakpoint-number | 設置指定斷點(diǎn)有效,當到達斷點(diǎn)時(shí)刪除它。 |
finish | 繼續執行到函數結束。 |
Line Execution | |
step | 進(jìn)入下一行代碼的執行,會(huì )進(jìn)入函數內部。 |
next | 執行下一行代碼。但不會(huì )進(jìn)入函數內部。 |
until until line-number ifcondition | 繼續運行直到到達指定行號,或者函數,地址等。 |
return | 彈出選中的棧幀(stack frame)。如果后面指定參數,則返回表達式的值。 |
stepi | 執行下一條匯編/CPU指令。 |
info signals | 當收到信號時(shí)執行下列動(dòng)作:nostop(不要停止程序),stop(停止程序執行),print(顯示信號),noprint(不顯示),pass/noignore(允許程序處理信號),nopass/ignore(不讓程序接受信號) |
where | 顯示當前的行號和所處的函數。 |
Program Stack | |
backtrace | 顯示當前堆棧的追蹤,當前所在的函數。 |
backtrace full | 打印所有局部變量的值。 |
frame number | 選擇指定的棧幀。 |
up number | 向上或向下移動(dòng)指定個(gè)數的棧幀。 |
info frame addr | 描述選中的棧幀。 |
info args | 顯示選中棧幀的參數,局部變量,異常處理函數。all-reg也會(huì )列出浮點(diǎn)寄存器。 |
Source Code | |
list | 列出相應的源代碼。 |
set listsize count | 設置list命令打印源代碼時(shí)的行數。 |
directory directory-name | 在源代碼路徑前添加指定的目錄。 |
directory | 當后面沒(méi)有參數時(shí),清除源代碼目錄。 |
Examine Variables | |
print variable | 打印指定變量的值。 |
p *array-var@length | 打印arrary-var中的前length項。 |
p/x var | 以十六進(jìn)制打印整數變量var。 |
p/d var | 把變量var當作有符號整數打印。 |
p/u var | 把變量var作為無(wú)符號整數打印。 |
p/o var | 把變量var作為八進(jìn)制數打印。 |
p/t var | 以整數二進(jìn)制的形式打印var變量的值。 |
p/c variable | 當字符打印。 |
p/f variable | 以浮點(diǎn)數格式打印變量var。 |
p/a variable | 打印十六進(jìn)制形式的地址。 |
x/w address | 打印指定的地址,以四字節一組的方式。 |
call expression | 類(lèi)似于print,但不打印 void 。 |
disassem addr | 對指定地址中的指令進(jìn)行反匯編。 |
Controlling GDB | |
set gdb-option value | 設置 GDB 的選項。 |
set print array on | 以可讀形式打印數組。默認是 off 。 |
set print array-indexes on | 打印數組元素的下標。默認是 off 。 |
set print pretty on | 格式化打印 C 結構體的輸出。 |
set print union on | 打印 C 中的聯(lián)合體。默認是 on 。 |
set print demangle on | 控制 C++ 中名字的打印。默認是 on 。 |
Working Files | |
info files | 列出當前的文件,共享庫。 |
file file | 把file當作調試的程序。如果沒(méi)指定參數,丟棄。 |
core file | 把file當作 core 文件。如果沒(méi)指定參數,則丟棄。 |
exec file | 把file當作執行程序。如果沒(méi)指定參數,則丟棄。 |
symbol file | 從file中讀取符號表。如果沒(méi)指定參數,則丟棄。 |
load file | 動(dòng)態(tài)鏈入file文件,并讀取它的符號表。 |
path directory | 把目錄directory加入到搜索可執行文件和符號文件的路徑中。 |
Start and Stop | |
run | 從頭開(kāi)始執行程序,也允許進(jìn)行重定向。 |
continue | 繼續執行直到下一個(gè)斷點(diǎn)或觀(guān)察點(diǎn)。 |
continue number | 繼續執行,但會(huì )忽略當前的斷點(diǎn)number次。當斷點(diǎn)在循環(huán)中時(shí)非常有用。 |
kill | 停止程序執行。 |
quit | 退出 GDB 調試器。 |
l 在編譯可執行文件時(shí)需要給 gcc 加上 "-g" 選項,這樣它才會(huì )為生成的可執行文件加入額外的調試信息。
l 不要使用編譯器的優(yōu)化選項,比如: "-O","-O2"。因為編譯器會(huì )為了優(yōu)化而改變程序流程,那樣不利于調試。
l 在 GDB 中執行 shell 命令可以使用:shell command
l GDB 命令可以使用 TAB 鍵來(lái)補全。按兩次 TAB 鍵可以看到所有可能的匹配。
l GDB 命令縮寫(xiě):例如 info bre 中的 bre 相當于 breakpoints。
GDB 在 Emacs 中的操作:
emacs 按鍵 | 動(dòng)作 |
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 命令。 |
聯(lián)系客服