1. 程式人生 > >軟件開發--調試器GDB

軟件開發--調試器GDB

fff tar size 調試過程 gnu 重要性 導致 進行 暫停

一.GDB介紹

A.GDB
1.GNU項目中的調試器
2.能夠追蹤程序的執行,也能夠恢復程序崩潰前的狀態
B.GDB的重要性
1.軟件不是一次性開發完成的(是軟件就有bug,是程序就有問題)
2.調試時軟件開發過程中不可或缺的技術
C.GDB的常規應用
1.自定義程序的啟動方式(指定影響程序運行的參數)
2.設置條件斷點(在條件滿足時暫停程序的執行)
3.回溯檢查導致程序異常結束的原因
4.動態改變程序執行流(定位問題的輔助方式)
D.GDB的啟動方式
1.直接啟動--gdb ,gdb test.out ,gdb test.out core,
2.動態鏈接--gdb test.out pid
示例:對之前的在開發中的輔助工具章提到使用addr2line對程序中出現的錯誤進行定位,該示例使用gdb調試來完成該操作

技術分享圖片技術分享圖片
運行過程圖如圖所示
技術分享圖片
從圖中所標記的紅線可以知道編譯以及gdb的使用過程
1.首先使用gcc生成可調式的結果
2.使用gdb命令開啟gdb調試
3.使用file test.out命令關聯生成的結果
4.使用run命令生成結果 可以看到在標記5處知道程序出現的錯誤處
與之前的addr2line命令查找相比,gdb的操作就很快捷與方便
E.使用GDB進行斷點調試
1.斷電類型
a.軟件斷點:由非法指令異常實現(軟件實現)
b.硬件斷點:由硬件特性實現(數量有限)
c.數據斷點:由硬件特性實現(數量有限)
F.軟件斷點的相關操作
a.通過函數名設置斷點
1.break func_name
2.tbreak func_name
b.通過文件名行號設置斷點
1.break file_name:line_num
2.tbreak file_name:line_num
軟件調試的相關操作
技術分享圖片技術分享圖片
第一次GDB斷點調試的過程如下所示
技術分享圖片
可以看到
1.在使用了start命令之後,在main函數的入口處25行生產了斷點
2.使用break命令在37行生成斷點並且使用info breakpoints查看該斷點是否存在
3.繼續運行程序發現在37行停住,使用set var命令與next命令對其繼續查看
技術分享圖片
1.使用next命令之後該程跳出循環來到41行
2.使用tbreak命令在43行設置斷點,繼續運行發現程序正常
3.使用jump命令使其跳至45行,由結果可以得出程序關閉正常,可以猜測程序在43行處有問題
第二次調試過程
技術分享圖片技術分享圖片
1.主要使用tbreak func直接將斷點設置在func函數並使用info breakpoints進行查看斷點是否設置成功
2.繼續運行可以看到提示在func.c:7處提示問題
3.執行return命令發現程序正常結束,可以知道函數在func.c:7出有問題

軟件開發--調試器GDB