GDB調試手冊[轉]

來源:互聯網
上載者:User

標籤: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
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
variable
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調試手冊[轉]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.