一.偵錯程式gdb簡介(功能)
gdb是gnu發布的一款功能強大的程式除錯工具。
功能:啟動被除錯程式;
讓被除錯的程式在指定的位置停住(設定斷點);
當程式被停住時,可以檢查程式狀態。
二.偵錯程式gdb的使用
1. gcc –gdemo.c –o demo
gdb demo
2. run 啟動被除錯程式
list 顯示程式內容
gdb中通過list命令檢視原始碼。list每次顯示的函式可以指定,下文中假定指定顯示的行數為10行。
1) listlinenum: 以linenum指定的行號為中心,顯示10行
2) listfunction: 以指定的函式為中心,顯示10行
3) list: 重複上一次的list指令,也可以直接按回車鍵,重複上次指令。
4) setlistsize count: 設定每次顯示的行數。
show listsize: 顯示已設定的顯示行數。
5) listlinespec: 設定顯示的檔案,list指令都是以指定的檔案為域來顯示原始檔,這個指令可以指定要顯示的原檔案。
例:list_test.c
以後的list指令都是顯示,list_test.c 的原始檔。
6) listfirst,last: 顯示指定起始行到結束結束行的原始檔。
例:list10,100
7) list,last: 顯示以指定的last為結束行,顯示10行。
例:list ,30 顯示21~30行,共顯示10行
8) listfirst: 以first為第一行,顯示10行。
9) list +:以上次顯示的結束行為起始行顯示後10行
10) list –:以上次顯示的起始行為結束行,顯示前10行
3. break20 在20行設定斷點
break 20 if i=10 在i=10時停住
break add_sum 在呼叫函式時停住
info break 檢視斷點資訊
delete 1 刪除斷點(1為斷點編號num type)
4. print i 檢查程式狀態
5. next 不會進入子函式
step 可進入子函式
6. continue 在下乙個斷點處停住
finish 當前函式結束時停住
7. quit 退出
break 20
runnext
三.偵錯程式gdb除錯段錯誤
段錯誤:記憶體錯誤
產生段錯誤的原因:
程式執行過程中能訪問到的記憶體空間主要有棧和堆。棧存放函式的本地變數,堆是程式執行過程中能自由分配和使用的記憶體空間。產生段錯誤和棧、堆的訪問密切相關。
產生段錯誤的原因主要有:
· 解引用空指標
· 訪問不可訪問的記憶體空間(如核心空間)
· 訪問不存在的記憶體位址
· 試圖寫乙個唯讀記憶體空間(如**段)
· 棧溢位(函式遞迴呼叫)
· 使用未初始化的指標(定義時沒有初始化或者已經**)
避免段錯誤:
· 定義指標後初始化
· 陣列下標是否越界
· 在堆上分配空間是否足夠(記憶體限制)
· 變數處理時格式控制是否合理
除錯段錯誤:
在**的每一行下加printf檢查段錯誤發生的位置
gcc –g demo.c
gdb a.out
run //停在段錯誤處
測試**模板:
測試版release:gcc demo.c–d__debug__ (出現除錯資訊)
發行版debug:gcc demo.c (不出現除錯資訊)
嵌入式偵錯程式 GDB
使用gcc除錯c程式時,只能依靠gcc發出的警號或錯誤資訊來進行,所以除錯的效率非常低。為此,gnu開發了gdb偵錯程式。gdb的除錯功能非常強大,甚至可以和visual c 等開發工具箱媲美。但gdb的缺點是沒有圖形除錯介面。儘管如此,對於從事嵌入式linux應用開發的人員還是有必要知道gdb的使...
嵌入式偵錯程式GDB
gdb的除錯功能非常強大,不過,gdb的缺點是沒有圖形除錯介面。通過執行命令 gcc g 檔名 o 檔名 對相應檔案進行編譯,引數g是把除錯資訊加入生成的可執行檔案中。在除錯過程中,可以看到gdb先顯示版本 資訊和庫的相關資訊,等待使用者輸入除錯指令。常用命令 1 檢視原始檔,通過命令l檢視 行數 ...
嵌入式系統偵錯程式gdb
1 gnu計畫的工具 核心除錯kgdb 2 程式的錯誤分類 編譯時錯誤 語法錯誤 執行時錯誤 記憶體錯誤,邏輯錯誤 3 gdb的功能 1.執行程式 2.設定斷點 3。檢視變數值 4 hello.c gcc g hello.c o hello gdb hello 5 使用 tui layout asm...