GDB調試命令

來源:互聯網
上載者:User

標籤:有用   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調試命令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.