mascot:射水魚
gdb官網:
gdb適用的程式語言:
ada / c / c++ / objective-c / pascal 等。
gdb的工作方式:本地除錯和遠端除錯。
目前release的最新版本為8.0,gdb可以執行在linux 和windows 作業系統上。
1.1 what is gdb?
(1)gdb【gnudebuger】是gnu 開源組織發布的乙個強大的unix 下的程式除錯工具。
(2)能夠跟蹤程式的執行【execute】,觀察程式執行時內部的狀態;當程式崩潰時【crashed】,檢視程式崩潰前的狀態。
1.2 gdb的四大功能 (plus other things in support of these)
(1)自定義程式的啟動方式(指定影響程式執行時的引數)
(2)設定斷點
(3)回溯檢查導致程式異常結束的原因 【core dump】
(4)動態改變程式執行流 【可以跳過一些**以此定位出問題的地方】
1.3 為什麼需要 gdb?
(1)軟體不是一次性開發完成的,在軟體開發的任何階段都有可能存在bug
(2)除錯是軟體開發中不可或缺的技術,除錯工具對於軟體開發很重要
gdb是動態分析工具,binutils工具集是靜態分析工具。
3.1 gdb的啟動
gdb的啟動方式有3種,這3種方式分別適用不同的場合下。
(1) gdb
這種方式是在gdb內操作可執行程式,可以在shell命令列輸入gdb或者進入gdb後輸入file
當程式執行發生異常時,會發生核心轉儲(core dump),產生core檔案。可以使用gdb對core檔案進行分析,定位問題所在的檔案**行。
(3)gdb attach pid
gdb可以動態的連線到乙個程序上,使用之前使用 ps -aux 檢視想要連線的程序的pid號。
3.2 gdb的退出
使用 quit / q / crtl +d 退出gdb。
【tips】 使用gdb前需要完成的工作
(1)在編譯c/c++原始碼時,需要新增 -g 選項,將除錯資訊新增到可執行檔案中,供gdb使用
(2)linux下預設是不產生core檔案的,要使用umilit -c unlimited命令進行設定,這樣才能產生供gdb使用的core檔案
4.1 程式斷點
程式斷點就是指處理器指令斷點,通俗的解釋就是:當程式執行到某個地方時,我們希望程式停下來,即程式「斷了」!停下來的目的,就是讓程式設計師檢查當前程式執行的狀態。對於軟體開發人員來說,程式斷點是除錯程式的必須手段,在嵌入式軟體開發中,對程式斷點進行了區分:軟體程式斷點和硬體程式斷點。
4.1.1 軟體程式斷點
原理:處理器在執行程式的過程中,如果遇到一條非法的指令就會產生乙個異常中斷,程式就會停下來。軟體程式斷點就是利用這個特性來實現的,當我們設定了乙個斷點後,除錯工具就在斷點的位置放置一條非法的指令,同時將被替換的指令保留起來。當程式執行到了被非法指令替換的地方時,處理器所產生的異常中斷一方面在中斷服務程式中恢復被替換的指令,另一方面將控制權交給除錯工具。從理論上說,軟體程式斷點可以設定n個,n的大小由記憶體容量決定。
在介紹硬體程式斷點時,我們先要問一問,為什麼要引入硬體程式斷點。引入一種新的概念,往往意味著老的概念存在一定的侷限性。那軟體程式斷點存在什麼侷限性呢?想想看,在嵌入式系統中,如果我們想除錯乙個boot loader(參見《什麼是boot loader》一文),而此時處理器還在執行位於flash中的程式,此時軟體程式斷點這種方法還有效嗎?當然不行,因為flash中的內容並不能像記憶體一樣,被處理器通過乙個寫操作直接更改。在flash中更改內容(或稱對flash進行程式設計)存在一定的協議,而顯然處理器不會去實現這一協議的,這會嚴重影響處理器的通用性。此外,即使實現了,其效率也不會高。即然這樣,軟體程式斷點不能運用到boot loader的除錯中去。解決方法時什麼呢?就是處理器提供一定的暫存器用於存放程式的斷點位置,當我們通過除錯工具設定斷點時,除錯程式會將所需中斷的指令位址放入到處理器的程式中斷暫存器中。顯然,處理器的這種暫存器是有限的,因此,我們不能設定n個。
4.1.2 硬體程式斷點
原理:
4.2 資料斷點
【參考資料】
[1] 程式斷點與資料段點
[2] ff
除錯工具 gdb
gcc o a.out a.c gdb q a.out break main info register i r objdump d a.out grep a20 main.轉換為機器 objdump m intel d a.out grep a20 main.gdb 設定 1 gdb q 2 se...
gdb除錯工具
檢視幫助一是man 命令,二是進入 www.gnu.org 找到gdb的幫助文件 更詳細 gcc wall g main.c o main,只有這樣才能產生除錯資訊,包括core的除錯資訊。一 常用命令 run r 執行,執行到斷點,重新用r,表示重新開始執行。list l 列出源 l 2,l ma...
GDB除錯工具
mascot 射水魚 gdb官網 gdb適用的程式語言 ada c c objective c pascal 等。gdb的工作方式 本地除錯和遠端除錯。目前release的最新版本為8.0,gdb可以執行在linux 和windows 作業系統上。1.1 what is gdb?1 gdb gnud...