歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

GDB調試命令

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  *array@len      查看數組(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調試程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

GDB+GDBserver無源碼調試Android 動態鏈接庫的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

使用hello-gl2建立ndk-GDB環境(有源碼和無源碼調試環境) http://www.linuxidc.com/Linux/2013-06/85935.htm

在Ubuntu上用GDB調試printf源碼 http://www.linuxidc.com/Linux/2013-03/80346.htm

Linux下用GDB調試可加載模塊 http://www.linuxidc.com/Linux/2013-01/77969.htm

強大的C/C++ 程序調試工具GDB  http://www.linuxidc.com/Linux/2016-09/135171.htm

Linux GDB調試 詳述 http://www.linuxidc.com/Linux/2016-11/137505.htm

使用GDB命令行調試器調試C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm

GDB調試命令總結  http://www.linuxidc.com/Linux/2016-08/133988.htm

GDB調試工具入門  http://www.linuxidc.com/Linux/2016-09/135168.htm

GDB 的詳細介紹:請點這裡
GDB 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved