簡介
一款調(diào)試工具
使用
使用gdb調(diào)試工具時(shí),在gcc打包為二進(jìn)制文件時(shí)需要指定-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)滿足條件時(shí)才會執(zhí)行防嗡,一般用在循環(huán)/遞歸語句
run
/ r
運(yùn)行程序
不用設(shè)置斷點(diǎn)直接執(zhí)行琼富,如果遇到程序出現(xiàn)錯(cuò)誤時(shí)會顯示出錯(cuò)的行數(shù),可快速找到錯(cuò)誤
該命令還可以在后面添加參數(shù)雌贱,每個(gè)參數(shù)以空格分開,它表示向main
函數(shù)中傳入?yún)?shù)
n
(next) / S
(step)
n
/S
表示執(zhí)行下一條指令
它們的區(qū)別在于執(zhí)行函數(shù)的時(shí)候死遭,當(dāng)使用n
來執(zhí)行的時(shí)候會直接越過函數(shù)不會進(jìn)入到函數(shù)內(nèi)部執(zhí)行而是直接執(zhí)行到下一行,而S
則反之
在調(diào)試時(shí)可以按需選擇如何使用這兩個(gè)命令
gbd調(diào)試時(shí)有一個(gè)小毛病就是在進(jìn)入到函數(shù)內(nèi)部時(shí)如果是庫函數(shù)就會報(bào)找不到那個(gè)文件
所以在使用時(shí)要注意執(zhí)行遇到庫函數(shù)時(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)用時(shí)產(chǎn)生的局部變量和臨時(shí)值