GDB除錯基本命令

2021-08-04 08:46:55 字數 4453 閱讀 1837

一、列檔案清單

list / l

列出產生執行檔案的源**的一部分

//列出 line1 到 line2 行之間的源** (gdb) list line1, line2 //輸出從上次呼叫list命令開始往後的10行程式** (gdb) list //輸出第 n 行附近的10行程式** (gdb) list n //輸出函式function前後的10行程式** (gdb) list function

二、執行程式

run / r

執行準備除錯的程式,在它後面可以跟隨發給該程式的任何引數,包括標準輸入和標準輸出說明符(《和》)和shell萬用字元(*、?、[、])在內。

如果你使用不帶引數的run命令,gdb就再次使用你給予前一條run命令的引數,這是很有用的。

set args

命令就可以修改傳送給程式的引數,而使用

show args

命令就可以檢視其預設引數的列表。

(gdb) set args –b –x(gdb) show args

三、顯示資料

print / p

檢視變數的值

//利用print 命令可以檢查各個變數的值。

(gdb) print p (p為變數名)

print 是 gdb 的乙個功能很強的命令,利用它可以顯示被除錯的語言中任何有效的表示式。表示式除了包含你程式中的變數外,還可以包含以下內容:

//對程式中函式的呼叫

(gdb) print find_entry(1, 0)

//資料結構和其他複雜物件

(gdb) print *table_start

$8=//值的歷史成分

(gdb)print $1 ($1為歷史記錄變數,在以後可以直接引用 $1 的值)

whatis

檢視變數的型別

//whatis 命令可以顯示某個變數的型別

(gdb) whatis p

type = int *

四、設定與清除斷點

break / b

可以用來在除錯的程式中設定斷點,該命令有如下四種形式

//使程式恰好在執行給定行之前停止

break line-number

//使程式恰好在進入指定的函式之前停止

break function-name

//如果condition(條件)是真,程式到達指定行或函式時停止

break line-or-function if condition

//在指定例程的入口處設定斷點

break routine-name

如果該程式是由很多原檔案構成的,你可以在各個原檔案中設定斷點,而不是在當前的原檔案中設定斷點,其方法如下:

(gdb) break filename:line-number

(gdb) break filename:function-name

break  if

要想設定乙個條件斷點,可以利用break if命令,如下所示:

(gdb) break line-or-function if expr

(gdb) break 46 if testsize==100

clean number

清除原檔案中某一**行上的所有斷點

注:number 為原檔案的某個**行的行號

五、斷點的管理

1. 顯示當前gdb的斷點資訊

info break

2. delete 刪除指定的某個斷點

delete breakpoint

//該命令將會刪除編號為1的斷點

(gdb) delete breakpoint 1

//如果不帶編號引數,將刪除所有的斷點

(gdb) delete breakpoint

3. 禁止、允許使用某個斷點

disable breakpoint 1

enable breakpoint 1

該命令將禁止、允許斷點 1,同時斷點資訊的 (enb)域將變為 n、y

六、單步執行

next / n

不進入的單步執行

step

進入的單步執行

finish

如果已經進入了某函式,而想退出該函式返回到它的呼叫函式中,可使用命令finish

until

結束當前迴圈

七、函式的呼叫

call name

呼叫和執行乙個函式

(gdb) call gen_and_sork( 1234,1,0 )

(gdb) call printf(「abcd」)

$1=4

finish 結束執行當前函式,顯示其返回值(如果有的話)

八、 原檔案的搜尋

search text

該命令可顯示在當前檔案中包含text串的下一行。

reverse-search text

該命令可以顯示包含text 的前一行。

小結:常用的 gdb 命令

backtrace / bt顯示程式中的當前位置和表示如何到達當前位置的棧跟蹤(同義詞:where)

breakpoint / b在程式中設定乙個斷點

cd改變當前工作目錄

clear刪除剛才停止處的斷點

commands命中斷點時,列出將要執行的命令

continue從斷點開始繼續執行

delete刪除乙個斷點或監測點;也可與其他命令一起使用

display程式停止時顯示變數和表達時

down下移棧幀,使得另乙個函式成為當前函式

frame選擇下一條continue命令的幀

info顯示與該程式有關的各種資訊

jump在源程式中的另一點開始執行

kill異常終止在gdb 控制下執行的程式

list列出相應於正在執行的程式的原檔案內容

next執行下乙個源程式行,從而執行其整體中的乙個函式

print顯示變數或表示式的值

pwd顯示當前工作目錄

ptype顯示乙個資料結構(如乙個結構或c++類)的內容

quit退出gdb

reverse-search在原始檔中反向搜尋正規表示式

run執行該程式

search在原始檔中搜尋正規表示式

set variable給變數賦值

signal將乙個訊號傳送到正在執行的程序

step執行下乙個源程式行,必要時進入下乙個函式

undisplay display命令的反命令,不要顯示表示式

until結束當前迴圈

up上移棧幀,使另一函式成為當前函式

watch在程式中設定乙個監測點(即資料斷點)

whatis顯示變數或函式型別

gdb除錯基本命令

gdb是乙個由gnu開源組織發布的 unix linux作業系統下的 基於命令列的 功能強大的程式除錯工具。對於一名linux下工作的c 程式設計師,gdb是必不可少的工具 對c c 程式的除錯,需要在編譯前就加上 g選項 g g hello.cpp o hello 除錯可執行檔案 gdb prog...

GDB除錯基本命令

gdb是乙個強大的命令列除錯工具。大家知道命令列的強大就是在於,其可以形成執行序列,形成指令碼。unix下的軟體全是命令列的,這給程式開發提代供了極大的便利,命令列軟體的優勢在於,它們可以非常容易的整合在一起,使用幾個簡單的已有工具的命令,就可以做出乙個非常強大的功能。一般來說,gdb主要幫忙你完成...

gdb除錯的基本命令

gdb除錯在編譯時必須要加 g選項 gcc g 輸入gdb進入gdb除錯環境。或者直接輸入gdb progfile來載入檔案。或者進入gdb環境後,通過命令file progfile來載入需要除錯的可 執行檔案檔案。常用命令行表 命令命令縮寫 命令說明 list l顯示多行源 break b設定斷點...