天天看點

linux子系統gdp調試,GDB調試指令_Linux程式設計_Linux公社-Linux系統門戶網站

1、檢視源碼:

list [函數名][行數]

2、暫停程式

(1)設定斷點:

a、break + [源代碼行号][源代碼函數名][記憶體位址]

b、break ... if condition  ...可以是上述任一參數,condition是條件。例如在循環體中可以設定break ... if i = 100 來設定循環次數

(2)觀察斷點:

a、watch + [變量][表達式]  當變量或表達式值改變時即停住程式。

b、rwatch + [變量][表達式] 當變量或表達式被讀時,停住程式。

c、awatch + [變量][表達式] 當變量或表達式被讀或被寫時,停住程式。

(3)設定捕捉點:

catch + event  當event發生時,停住程式。

event可以是下面的内容:

a、throw 一個C++抛出的異常。(throw為關鍵字)

b、catch 一個C++捕捉到的異常。(catch為關鍵字)

c、exec 調用系統調用exec時。(exec為關鍵字,目前此功能隻在HP-UX下有用)

d、fork 調用系統調用fork時。(fork為關鍵字,目前此功能隻在HP-UX下有用)

e、vfork 調用系統調用vfork時。(vfork為關鍵字,目前此功能隻在HP-UX下有用)

f、load 或 load 載入共享庫(動态連結庫)時。(load為關鍵字,目前此功能隻在HP-UX下有用)

g、unload 或 unload 解除安裝共享庫(動态連結庫)時。(unload為關鍵字,目前此功能隻在HP-UX下有用)

(4)捕獲信号:

handle + [argu] + signals

signals:

是Linux/Unix定義的信号,SIGINT表示中斷字元信号,也就是Ctrl+C的信号,SIGBUS表示硬體故障的信号;SIGCHLD表示子程序狀态改變信号; SIGKILL表示終止程式運作的信号,等等。

argu:

nostop  當被調試的程式收到信号時,GDB不會停住程式的運作,但會打出消息告訴你收到這種信号。

stop    當被調試的程式收到信号時,GDB會停住你的程式。

print    當被調試的程式收到信号時,GDB會顯示出一條資訊。

noprint  當被調試的程式收到信号時,GDB不會告訴你收到信号的資訊。

pass or noignore    當被調試的程式收到信号時,GDB不處理信号。這表示,GDB會把這個信号交給被調試程式會處理。

nopass or ignore    當被調試的程式收到信号時,GDB不會讓被調試程式來處理這個信号。

(5)線程中斷:

break [linespec] thread [threadno] [if ...]

linespec 斷點設定所在的源代碼的行号。如: test.c:12表示檔案為test.c中的第12行設定一個斷點。

threadno 線程的ID。是GDB配置設定的,通過輸入info threads來檢視正在運作中程式的線程資訊。

if ...  設定中斷條件。

3、檢視資訊:

(1)檢視資料:

print  variable        檢視變量

print *[email protected] 檢視數組(array是數組指針,len是需要資料長度)

可以通過添加參數來設定輸出格式:

/x 按十六進制格式顯示變量。

/d 按十進制格式顯示變量。

/u 按十六進制格式顯示無符号整型。

/o 按八進制格式顯示變量。

/t 按二進制格式顯示變量。

/a 按十六進制格式顯示變量。

/c 按字元格式顯示變量。

/f 按浮點數格式顯示變量。

(2)檢視記憶體:

examine /n f u + 記憶體位址(指針變量)

n 表示顯示記憶體長度

f 表示輸出格式(見上)

u 表示位元組數制定(b 單位元組;h 雙位元組;w 四位元組;g 八位元組;預設為四位元組)

如:

x /10cw pFilePath  (pFilePath為一個字元串指針,指針占4位元組)

x 為examine指令的簡寫。

(3)檢視棧資訊:

backtrace [-n][n]

n  表示隻列印棧頂上n層的棧資訊。

-n 表示隻列印棧底上n層的棧資訊。

不加參數,表示列印所有棧資訊。

基本gdb指令:

---------------------------------------------------------------------

指令          簡寫        功能

---------------------------------------------------------------------

file                            裝入想要調試的可執行檔案.

kill            k              終止正在調試的程式.

list            l              列出産生執行檔案的源代碼的一部分.

next          n              執行一行源代碼但不進入函數内部.

step          s              執行一行源代碼而且進入函數内部.

continue  c              繼續執行程式,直至下一中斷或者程式結束。

run            r              執行目前被調試的程式.

quit          q              終止 gdb.

watch                        使你能監視一個變量的值而不管它何時被改變.

catch                        設定捕捉點.

thread      t              檢視目前運作程式的線程資訊.

break        b              在代碼裡設定斷點, 這将使程式執行到這裡時被挂起.

make                        使你能不退出 gdb 就可以重新産生可執行檔案.

shell                        使你能不離開 gdb 就執行 UNIX shell 指令.

print          p              列印資料内容。

examine  x              列印記憶體内容。

backtrace bt            檢視函數調用棧的所有資訊。

GDB 的詳細介紹:請點這裡

GDB的下載下傳位址:請點這裡

linux子系統gdp調試,GDB調試指令_Linux程式設計_Linux公社-Linux系統門戶網站