linux下的程式除錯工具gdb

2021-07-08 12:27:40 字數 2196 閱讀 1531

這裡只列舉最最常用的gdb命令。

gdb program:準備除錯程式。也可以直接進入gdb,再通過file命令載入。

run args:開始執行程式,run後面可以加程式需要的引數,就像在命令列正常執行時那樣。

s/n/si/c/kill:s即step in,進入下一行**執行;n即step next,執行下一行**但不進入;si即step instruction,執行下一條彙編/cpu指令;c即continue,繼續執行直到下乙個斷點處;kill終止除錯;quit退出gdb。

bt:bt是backtrace的縮寫,列印當前所在函式的堆疊路徑。

info frame id:列印選中的棧幀的資訊。

info args:列印選中棧幀的引數。

print variable:列印指定變數的值。

list:列出相應的源**。

info registers:檢視所有暫存器的值。

還有個更靈活強大的是直接列印%esp開始的前n個元素,例如列印棧上前10個元素就是:x/10x $sp

例:利用氣泡排序演算法程式bubble.c,演示gdb除錯過程,待除錯程式bubble.c的源**如下:

1.編譯執行源程式.

為了方便除錯,在編譯的時候要加上-g選項,生成的可執行檔案才能用gdb進行原始碼的除錯.

2.啟動gdb,檢視bubble程式相關資訊

(1)用list(l)指令列出源程式.

一次只能列出10行,如果要從第11行開始繼續列出源**可以直接按回車.

(2)用info source 命令檢視以下當前源程式的資訊.

可以得知程式名,目錄,檔案大小,語言等資訊.

3.除錯bubble程式.

(1)在函式swap處設定乙個斷點.

br是break的簡寫.斷電設定成功則顯示該斷點的資訊,該斷點號為1,位址為0x400589,它在檔案bubble.c的7行.

可以用info br命令檢視以下檔案bubble.c斷點的資訊和狀態.

其中num列表示斷點的斷點號;type列表示斷點的烈性,其中breakpoint表示斷點,該指令同時也會顯示watch的資訊,watch表示檢查點;disp表示斷點的狀態,del表示斷點暫停後自動刪除斷點,keep表示斷點暫停後繼續保持斷點,dis表示斷點暫停後關閉斷點;enb表示斷點是否啟動,該斷點是y,表示處於enable狀態;address表示斷點的記憶體位址;what表示斷點在源程式中的位置.

(2)執行bubble程式.

程式已經在斷點1停下來,當斷點停下時,可以檢視變數值.

(4)刪除斷點1,並用info br檢視到,當前斷點為無.

(5)在18行號上設乙個斷點.發現斷點號為2,位址為 0x4005e2,它在檔案bubble.c的18行.並刪除斷點2,在18行設定乙個斷點,當j=5時讓程式停下來.

用info br命令檢視斷點資訊.

(6)繼續執行程式

程式在斷點3停下,斷點3是哥條件斷點.要驗證,只需要j=5即可.

Linux下GDB除錯工具

1.常用的除錯 的方法 不管你使用哪種方法除錯 都需要有足夠的耐性 方法一 在 中加入列印語句 在關鍵語句的前後 函式呼叫 關鍵變數 方法二 使用gdb除錯 原理也是讓程式分步執行,列印關鍵變數的值 1 使用gdb在編譯程式的時候必須加上 g選項 將程式的除錯資訊新增到生成的可執行程式中 gcc m...

linux下串列埠除錯工具

之前公司訂購了幾台裝置,剛開始接觸串列埠的時候,對串列埠了解太少,以下是在使用過程中用到的串列埠除錯命令和方法 1.除錯串列埠首先要用串列埠命令測試串列埠指示燈亮不亮,在linux下使用的命令如下 stty f dev ttys0 a 說明哈 dev ttys0 是你要除錯的那個串列埠的裝置名稱有很...

linux下記憶體除錯工具 valgrind

1 valgrind之memcheck 最常用的工具,用來檢測程式中出現的記憶體問題,所有對記憶體的讀寫都會被檢測到,一切對malloc free new delete的呼叫都會 獲。所以,它能檢測以下問題 1 對未初始化記憶體的使用 2 讀 寫釋放後的記憶體塊 3 讀 寫超出malloc分配的記憶...