在Ubuntu上的GDB除錯

2021-10-10 02:59:23 字數 3434 閱讀 9535

• gdb : gnu debugger,是gnu工程為gnu作業系統開發的 偵錯程式,但它的使用不侷限於gnu作業系統, gdb可以執行 在unix、linux甚至microsoft windows。

• gdb可以除錯c、c++、objective-c、pascal、ada等語言編 寫的程式;被除錯的程式可以跟gdb執行於同一臺電腦,也可 執行於不同電腦。

• 使用gdb我們可以: – 設定斷點使程式停住 – 監視或修改程式中變數的值 – 跟蹤**執行過程

• 程式要能被除錯,必須包含除錯資訊

• 編譯程式時,通過gcc的-g選項為程式新增除錯資訊,例如:

gcc –g –o helloworld helloworld.c
• file            裝入想要除錯的可執行檔案。

• kill 終止正在除錯的程式。

• list 列出產生執行檔案的源**的一部分。

• next 執行一行源**但不進入函式內部。

• step 執行一行源**而且進入函式內部。

• run 執行當前被除錯的程式。

• c 繼續執行程式。

• quit 終止gdb。 • watch 使你能監視乙個變數的值而不管它何時被改變。

• backtrace 棧跟蹤,查出**被誰呼叫。

• print 檢視變數的值。

• make 使你能不退出gdb就可以重新產生可執行檔案。

• shell 使你能不離開gdb就執行unix shell命令。

• whatis 顯示變數或函式型別。

• break 在**里設斷點,這將使程式執行到這裡時被掛起。

• info break 顯示當前斷點清單,包括到達斷點處的次數等。

• info files 顯示被除錯檔案的詳細資訊。

• info func 顯示所有的函式名稱。

• info local 顯示當函式中的區域性變數資訊。

• info prog 顯示被除錯程式的執行狀態。

• delete [n] 刪除第n個斷點。

• disable[n] 關閉第n個斷點。

• enable[n] 開啟第n個斷點。

• ptype 顯示結構定義。

• set variable 設定變數的值。

• call name

(args) 呼叫並執行名為name,引數為args的函式。

• finish 終止當前函式並輸出返回值。

• return value 停止當前函式並返回value給呼叫者。

• break命令的使用

– 根據行號設定斷點:

• (gdb)

break linenum

– 根據函式名設定斷點:

• (gdb)

break funcname

– 執行非當前原始檔的某行或某函式時停止執行:

• (gdb)

break filename:linenum

• (gdb)

break filename:funcname

– 根據條件停止程式執行:

• (gdb)

break linenum if expr

• (gdb)

break funcname if expr

在終端輸入命令gdb,若是沒有安裝,則用命令:sudo apt-get install gdb進行安裝

• 下面的**實現對乙個整型數的反轉功能,比如輸入123,則 輸出321。

• 但輸入100時,程式的輸出結果卻不正確,請找出問題。

#include

void

showrevertnum

(int inum)

printf

("%d\n"

, inum);}

intmain

(void

)

編寫**:

對源程式進行編譯,加上-g選項,使其可以進行除錯:

顯示**及行號:

通過行號設定斷點

通過函式名設定斷點

檢視所有斷點資訊

● linux中,程式崩潰時,一般會產生core檔案,記錄程序退出前

的狀態,除錯段錯誤問題,借助於該檔案,可快速定位問題。

● 可按如下步驟生成和使用core檔案

– step 1: 讓系統產生core檔案

ulimit –c num #設定core檔案容量(num為數字,為0是不產生core檔案)

– step 2: 執行程式,讓程式崩潰,從而生成core檔案

– step 3: gdb配合core檔案,定位問題

比如: gdb segdemo core

示例:利用core檔案定位以下出錯**

#include

intmain()

編寫**並為其新增除錯資訊

產生core檔案

gdb配合core檔案,定位問題

Ubuntu下的GDB除錯

gdb gnu debugger,是gnu工程為gnu作業系統開發的 偵錯程式,但它的使用不侷限於gnu作業系統,gdb可以執行 在unix linux甚至microsoft windows。gdb可以除錯c c objective c pascal ada等語言編 寫的程式 被除錯的程式可以跟gd...

在linux上用gdb除錯的小技巧

偶然發現竟然有這個玩法。首先一開始,terminal可顯示的行數實在有限,一些迴圈次數較多的需要快進的程式直接用終端是在不方便。因此我就想,將gdb的結果輸出到檔案會發生什麼呢。然後我就試了一下 justin justin music ics lab lab2 gdb bomb gdbbomb.lo...

GDB 在arm開發板上的遠端除錯

嵌入式linux的gdb除錯環境由host和target兩部分組成,host端使用arm linux gdb,target board端使用gdbserver。除錯時,應用程式在嵌入式目標系統上執行,而gdb除錯在host端。一 編譯安裝gdb gdbserver 這是我的編寫的編譯指令碼 bin ...