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