嵌入式LINUX偵錯程式GDB

2021-07-14 17:59:43 字數 2053 閱讀 9139

一.偵錯程式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...