標籤:有用 watch continue inf 顯示 監視 eve 訊號 cond
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調試命令