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出有問題ide