gdb 除錯工具

2021-09-08 16:29:00 字數 1764 閱讀 1802

除錯程式的基本思想是 : 分析現象 –》 假設錯誤出現的原因 –》 產生新的現象去驗證假設

問題**

#include int add_range(int low, int high)

int main(void)

編譯時,必須使用引數 -g,生成可執行檔案,之後才能使用gdb除錯

以上是,gcc –wall –w –g gdb1.c –o gbd1

然後,gdb gbd1 ( 用gdb除錯可執行檔案 )

help –》 可以進一步 例如 help files 檢視幫助

list 1 從第一行顯示,10行為單位,繼續只需要 list,就可以繼續顯示,期間技巧是,之間敲回車,就是執行之前的命令,例如先敲 list ,之後直接敲回車,就會繼續執行 list,縮寫 l 。list行號列出從第幾行開始的源**。list 函式名 列出某個函式的源**。

quit 退出環境,縮寫 q

把源**改名或移動到別處再呼叫gdb除錯,這樣就列不出源**了。可見,除錯時,雖然除錯的是可執行檔案,但是,也是需要原始檔的。

start 開始執行

next 繼續執行,縮寫n

step 進入呼叫函式內容,縮寫 s

,也是繼續執行,只是碰到函式要進入內部。

backtrace 檢視函式呼叫的棧,縮寫 bt

info 檢視區域性變數,縮寫i

, 例如 i locals 檢視本地變數值

frame 變更當前堆疊,例如你在乙個函式中,你想檢視main函式中的變數的內容,則需要先變更當前堆疊,簡寫為

f,例如 f 1 (通過 bt 可以知道堆疊號,當前main函式堆疊號時 1 )

finish 執行到當前函式返回為止

set var sum=0 直接在gdb中修改 sum的值。還可以使用 print命令修改值,print 命令後面跟的是表示式,而且函式也是表示式,所以可以通過 print修改變數的值或者呼叫函式,縮寫是 p

斷點display sum 每次停下來時,都顯示 sum,undisplay命令可以取消顯示,此時要給乙個引數,就是第幾個變數不想繼續顯示了,例如 undisplay 1

break 命令,設定斷點,簡寫 b,可以在迴圈外設定斷點,然後不需要繼續執行迴圈時,直接跳到斷點。例如 b 9 在第9行設定斷點,b的引數也可以是函式名,表示在某個函式開頭設定斷點。然後可以使用continue簡寫c , 繼續執行,而非進入到 for 迴圈中,程式到斷點會自動停下,可見,斷點可以跳過沒有問題的**。i breakpoints

檢視設定斷點的資訊,delete breakpoints 2,刪除斷點。先不用又不想刪除的斷點,可以禁用,disable breakpoints 3,啟用的話,直接 enable 3,就可以了。禁用的斷點會有標記(enb) n ,之前可用的狀態是 y,斷點設定非常靈活,可以設定斷點在滿足某個條件時才啟用,例如僅當 sum不等於0時菜終端, break 9 if sum != 0 , run 另可以從新從頭執行程式,簡寫r 。

觀察點x 命令列印指定儲存單元的內容, x/7b input , 7b代表列印格式,b表示每個位元組一組,7表示列印7組,觀察點是當程式訪問某個儲存單元時中斷,如果我們不知道某個儲存單元時在**被改動的,這時候觀察點尤其有用。watch 設定觀察點,例如:watch input[5],i watchpoints 檢視觀察點資訊,同樣使用 c 繼續執行到觀察點。

段錯誤

段錯誤

#include int main(void)

gdb會提示段錯誤,一般情況下,編譯的時候 –wall –w 引數使用後,會發現段錯誤。

除錯工具 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...