標籤:style http io ar os 使用 sp for strong
Linux 包含了一個叫gdb 的GNU 偵錯工具。gdb 是一個用來調試C和C++程式的強力調試器。它使你能在程式運行時觀察程式的內部結構和記憶體的使用方式。以下是 gdb 所提供的一些功能:它使你能監視你程式中變數的值、它使你能設定斷點以使程式在指定的程式碼上停止執行、它使你能一行行的執行你的代碼。在命令列上鍵入gdb並按斷行符號鍵就可以運行gdb 了。(Windows需要安裝MinGW或者CygWin並且需要配置環境變數才可以使用)
GDB 命令列參數
啟動 GDB:
l gdb executable
l gdb -e executable -c core-file
l 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 ifcondition |
如果條件滿足,在指定位置設定斷點。 |
break line threadthread-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 oncebreakpoint-number |
設定指定斷點有效,當到達斷點時置為無效。 |
enable del breakpoint-number |
設定指定斷點有效,當到達斷點時刪除它。 |
finish |
繼續執行到函數結束。 |
Line Execution |
|
step s step number-of-steps-to-perform |
進入下一行代碼的執行,會進入函數內部。 |
next n next number |
執行下一行代碼。但不會進入函數內部。 |
until until line-number until line-number ifcondition |
繼續運行直到到達指定行號,或者函數,地址等。 |
return return expression |
彈出選中的棧幀(stack frame)。如果後面指定參數,則返回運算式的值。 |
stepi si nexti ni |
執行下一條彙編/CPU指令。 |
info signals info handle handle SIGNAL-NAMEoption |
當收到訊號時執行下列動作: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 操作提示
l 在編譯可執行檔時需要給 gcc 加上 "-g" 選項,這樣它才會為產生的可執行檔加入額外的調試資訊。
l 不要使用編譯器的最佳化選項,比如: "-O","-O2"。因為編譯器會為了最佳化而改變程式流程,那樣不利於調試。
l 在 GDB 中執行 shell 命令可以使用:shell command
l GDB 命令可以使用 TAB 鍵來補全。按兩次 TAB 鍵可以看到所有可能的匹配。
l 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調試手冊
來源: http://www.programlife.net/gdb-manual.html
GDB調試手冊[轉]