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的下載下傳位址:請點這裡
