Linux複習之gdb除錯基本指令

2021-10-07 13:34:48 字數 1650 閱讀 5791

初學者在編輯程式時,往往會出現很多的語法錯誤,這些錯誤在編譯階段就會暴露,所以很容易被排除,但是有些錯誤可能出現在程式執行階段,需要深入的測試、除錯和修改。這就使得在一些大型專案裡,程式的除錯變的十分困難,這個時候就需要乙個高效的除錯工具,gdb除錯工具就是當前使用最廣泛的的除錯工具。

gdb除錯基本命令

1.檔案清單

指令:list/l

作用:列出產生執行檔案的源**的一部分

例如:list 10 20

作用是列出10到20行之間的**

list max

作用是輸出函式max前後的5行程式源**、

2.執行程式

指令:run/r

作用:執行準備除錯的程式

3.顯示資料

指令:print/p

作用:可以顯示被除錯的語言中任何有效的表示式,包括程式中的變數以及函式的呼叫。

4.設定和清除斷點

指令:break/b

作用:使程式恰好在執行給定行之前停止;使程式恰好在進入指定的函式之前停止。

例如:break line-number

在指定行處設定斷點

break function-name

在指定函式處設定斷點

gdb除錯的主要步驟以及各個指令的使用:

gcc -g main.c 在目標檔案中加入源**的資訊

gdb a.out 將a.out載入

(gdb) start 開始除錯

(gdb) n 一條一條執行

(gdb) step/s 執行源程式**,如果有函式呼叫,則進入該函式

(gdb) backtrace/bt 檢視函式呼叫棧幀

(gdb) info/i locals 檢視當前棧幀區域性變數

(gdb) frame/f 選擇棧幀,再檢視區域性變數

(gdb) print/p 列印變數的值

(gdb) finish 執行到當前函式返回

(gdb) set var sum = 0 修改變數的值

(gdb) list/l 列出原始碼

(gdb) display/undisplay sum 每次停下顯示變數的值/取消追蹤

(gdb) break/b 行號或者函式名 設定斷點

(gdb) continue/c 連續執行

(gdb) info/i breakpoints 檢視已經設定的斷點

(gdb) delete breakpoints 2 刪除某個斷點

(gdb) disable/enable breakpoints 3 禁用/啟用某個斷點

(gdb) break 9 if sum != 0 滿足條件才啟用斷點

(gdb) run/r 重新從程式開頭開始執行

(gdb) watch input[4] 設定觀察點

(gdb) info/i watchpoints 檢視設定的觀察點

(gdb) x/7b input 列印儲存器內容,其中b表示每個位元組組,7表示列印七組

(gdb) disassemble 反彙編當前函式或指定函式

(gdb) info registers 顯示所有暫存器的當前值

(gdb) x/20 $esp 檢視記憶體中開始的20個數

Linux複習之gdb除錯舉例

源程式如下,作用是通過呼叫函式輸出1 10的和 執行編譯指令 gcc o main main.c 編譯成功後,執行.main,程式顯示結果result 45 程式可以順利的編譯鏈結生成可執行檔案,說明沒有出現編譯問題,但是可以看見,輸出結果為134518459,明顯錯誤。正確結果應該是55,下面利用...

gdb基本除錯命令

因為近期在vim編輯器裡面嘗試著寫寫程式,然後就接觸到了gdb除錯。才剛剛接觸還是不很懂,像什麼設定斷點呀單步除錯呀什麼的,現在還沒怎麼用上。在這裡只是先寫一些自己剛剛學到的。之後的以後用到了在補充。首先是在vim裡面寫好了乙個簡單的程式,儲存為test 1.c.include int main 就...

GDB 除錯基本操作

gdb 切換到圖形頁面 ctrl x a 一.基本命令 1.如何進入gdb gdb 可執行程式名稱 前提是編譯的時候需要加 g進行編譯 2.gdb中清空螢幕 shell clear 3.設定斷點 b break 行號 函式名 檔名 行號 斷點可以設定多個 4.檢視斷點資訊 info breakpoi...