怎么做優(yōu)惠券網(wǎng)站電子商務(wù)主要干什么
gdb是linux下常用的代碼調(diào)試工具,本文記錄常用命令。
被調(diào)試的應(yīng)用需要使用 -g 參數(shù)進(jìn)行編譯,如不確定可使用如下命令查看是否支持debug
readelf -S filename | grep "debug"
啟動(dòng)調(diào)試
gdb binFile
?例如要調(diào)試sshd:
?
調(diào)試帶參數(shù)的應(yīng)用
有些應(yīng)用需要攜帶參數(shù)使用,此時(shí)gdb要增加--args參數(shù)指定命令行參數(shù)屬于應(yīng)用,如下示例,--args后的參數(shù)均屬于應(yīng)用sshd
gdb --args /usr/sbin/sshd -f /etc/ssh/sshd_config -ddd
?
調(diào)試正在運(yùn)行的進(jìn)程?
gdb --pid=PID
調(diào)試進(jìn)程的子進(jìn)程?
退出調(diào)試
輸入quit 或縮寫(xiě) q 進(jìn)行退出
查看源碼
list 列出當(dāng)前文件的源代碼,默認(rèn)列出前10行 (list 可以簡(jiǎn)寫(xiě)為 l)
?
選項(xiàng)
list [n], +:從指定行號(hào)n開(kāi)始,列出該行后面的源代碼
list [function_name]:列出指定函數(shù)的源代碼
list [sline], [eline]:列出指定行號(hào)范圍內(nèi)的源代碼,比如list 10 20 顯示10-20行之間的代碼
list -:列出上一個(gè)list命令列出的源代碼的下一部分
list +:列出當(dāng)前行后面的源代碼
?如果源碼是在某些庫(kù)中或其他不在調(diào)試范圍內(nèi)的位置,是查看不到的
全速運(yùn)行
run 縮寫(xiě) r
設(shè)置斷點(diǎn)在某行
break linenum 縮寫(xiě) b linenum
設(shè)置斷點(diǎn)在某文件某行
break filename:linenum 縮寫(xiě) b filename:linenum
設(shè)置斷點(diǎn)在某函數(shù)
break functionName 縮寫(xiě) b functionName
設(shè)置條件斷點(diǎn)
所謂條件斷點(diǎn),就是當(dāng)滿足一定條件時(shí),斷點(diǎn)才會(huì)命中。只要代碼執(zhí)行到斷點(diǎn)處,普通的斷點(diǎn)就會(huì)被命中并暫停下來(lái),而條件斷點(diǎn)必須要滿足設(shè)置的條件,才能夠被命中并暫停。
break functionName if a=1 縮寫(xiě) b functionName if a=1
查看斷點(diǎn)信息?
info break 縮寫(xiě) info b
使能或禁用斷點(diǎn)?
disable breakpoint_number
enable breakpoint_number
?breakpoint_number為斷點(diǎn)編號(hào),可通過(guò)info b查看,可在enable和disable加once參數(shù),表明禁用或使能一次
刪除斷點(diǎn)
delete breakpoint_number
設(shè)置觀察點(diǎn)?
在為變量或者一個(gè)表達(dá)式設(shè)置觀察點(diǎn)后,當(dāng)該變量或者表達(dá)式的值發(fā)生變化時(shí),程序會(huì)發(fā)生中斷,并且在變量或者表達(dá)式發(fā)生改變的地方暫停。
watch variable
繼續(xù)運(yùn)行
當(dāng)程序運(yùn)行到斷點(diǎn)處后會(huì)停止,使用countinue繼續(xù)執(zhí)行直到下一次斷點(diǎn)
countinue 縮寫(xiě) ccontinue n //跳過(guò)當(dāng)前斷點(diǎn)n次
單步運(yùn)行
next 縮寫(xiě) n //如果遇到函數(shù),不會(huì)進(jìn)入函數(shù)內(nèi)部,會(huì)一次性執(zhí)行
step 縮寫(xiě) s //會(huì)進(jìn)入函數(shù)內(nèi)部執(zhí)行
調(diào)用堆棧?
backtrace 縮寫(xiě) bt
返回堆棧
當(dāng)進(jìn)入到另一個(gè)函數(shù)體之后,如果想跳出這個(gè)函數(shù)體回到調(diào)用的地方,使用如下命令
finish
查看變量值
print 縮寫(xiě) pprint var_name // var_name是要查看的變量名稱print *array@len // 顯示數(shù)組array的前l(fā)en個(gè)元素的值
print struct_name // 顯示結(jié)構(gòu)體struct_name的成員變量值print *pointer_name // 查看指針指向的值
print pointer_name // 查看指針本身
修改變量值
set variable_name = new_value
跳轉(zhuǎn)
until line_number (line_number是要執(zhí)行到的行號(hào))
?以上只列舉了部分gdb常用命令,更詳細(xì)的介紹可查閱gdb使用手冊(cè)。