簡介
一款調(diào)試工具
使用
使用gdb調(diào)試工具時,在gcc打包為二進(jìn)制文件時需要指定-g參數(shù)表示在該程序中添加調(diào)試語句
當(dāng)編譯好后,執(zhí)行gdb 需要被調(diào)試的程序
list / l
列出被調(diào)試程序的源代碼,根據(jù)源碼向指定位置設(shè)置斷點(diǎn)
顯示出源代碼的下一頁使用 list / l
break / b
設(shè)置斷點(diǎn):break / b 行號
設(shè)置條件斷點(diǎn):b 行號 if 條件當(dāng)滿足條件時才會執(zhí)行,一般用在循環(huán)/遞歸語句
run / r
運(yùn)行程序
不用設(shè)置斷點(diǎn)直接執(zhí)行,如果遇到程序出現(xiàn)錯誤時會顯示出錯的行數(shù),可快速找到錯誤
該命令還可以在后面添加參數(shù),每個參數(shù)以空格分開,它表示向main函數(shù)中傳入?yún)?shù)
n (next) / S (step)
n/S 表示執(zhí)行下一條指令
它們的區(qū)別在于執(zhí)行函數(shù)的時候,當(dāng)使用n來執(zhí)行的時候會直接越過函數(shù)不會進(jìn)入到函數(shù)內(nèi)部執(zhí)行而是直接執(zhí)行到下一行,而S則反之
在調(diào)試時可以按需選擇如何使用這兩個命令
gbd調(diào)試時有一個小毛病就是在進(jìn)入到函數(shù)內(nèi)部時如果是庫函數(shù)就會報找不到那個文件所以在使用時要注意執(zhí)行遇到庫函數(shù)時要使用n來執(zhí)行
p(print)
顯示指定變量的值p 變量名
continue
繼續(xù)執(zhí)行斷點(diǎn)后續(xù)指令
quit
退出當(dāng)前調(diào)試
finish
結(jié)束當(dāng)前函數(shù)調(diào)用,回到調(diào)用點(diǎn)
set args
set args args1 args2 ..
在執(zhí)行程序前設(shè)置命令行參數(shù):
info b
查看gdb調(diào)試表中調(diào)試的內(nèi)容
ptype
查看變量類型:ptype 變量
bt(backtrace)
列出當(dāng)前程序正存活著的棧幀
它通常與frame配合使用
frame
根據(jù)棧幀編號,切換棧楨
它通常與bt配合使用
display & undisplay
設(shè)置跟蹤變量display
取消跟蹤變量undisplay,需要使用被跟蹤變量的編號
知識點(diǎn)
棧幀: 隨著函數(shù)調(diào)用而在stack上開辟的一片內(nèi)存空間, 用于存放函數(shù)調(diào)用時產(chǎn)生的局部變量和臨時值