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