2.1 啟動(dòng)調(diào)試
在程序開(kāi)始調(diào)試之前,要確保程序在gcc、g++編譯時(shí),有如下-g的添加調(diào)試信息的選項(xiàng)
gcc -g test.c -o test
1、啟動(dòng)未運(yùn)行的程序
啟動(dòng)未運(yùn)行的程序,只需要在對(duì)應(yīng)程序目錄中使用下面的命令
gdb test
2、調(diào)試已經(jīng)開(kāi)始運(yùn)行的程序進(jìn)程
調(diào)試已經(jīng)開(kāi)始運(yùn)行的程序進(jìn)程,首先先用top命令查看運(yùn)行的程序進(jìn)程的pid如下:
比如我要加載的程序qemu-system-x86的pid為269427,則用下面的命令將進(jìn)程附加到GDB調(diào)試
gdb attach 269427#gdb attach [進(jìn)程號(hào)]
或者先打開(kāi)gdb,在gdb中輸入attach 269427也可以。效果如下
此時(shí)程序是處于暫停狀態(tài)的,用下面的命令讓程序繼續(xù)運(yùn)行
#前面是縮寫(xiě),#后是全寫(xiě),兩者皆可
(gdb) c#continue
效果如下:
2.2 斷點(diǎn)管理
添加斷點(diǎn)
?方法一
#源程序只有一個(gè)文件
b [行號(hào)]#break [行號(hào)]
?方法二
#源程序多個(gè)個(gè)文件
b [文件名.c]:[行號(hào)]#break [文件名.c]:[行號(hào)]
添加斷點(diǎn)后如下所示:
查看所有斷點(diǎn)
info b#info break
效果如下:
我們可以看到所有的斷點(diǎn)還有斷點(diǎn)的編號(hào)
刪除斷點(diǎn)
delete#刪除所有斷點(diǎn)
delete [斷點(diǎn)編號(hào)]#刪除指定斷點(diǎn)
2.3 中斷調(diào)試執(zhí)行
s#step 單步執(zhí)行,進(jìn)入函數(shù)調(diào)用
n#next 逐行執(zhí)行當(dāng)前線程的代碼,不進(jìn)入函數(shù)調(diào)用
c#continue 執(zhí)行代碼到下一個(gè)斷點(diǎn)
f#finish 執(zhí)行完當(dāng)前函數(shù)并跳出
ignore [斷點(diǎn)號(hào)] [次數(shù)]#設(shè)置或修改運(yùn)行時(shí)斷點(diǎn)的忽略計(jì)數(shù)
2.4 運(yùn)行參數(shù)監(jiān)控
p [變量名]#print [變量名] 輸出該變量的值
display [變量名]#調(diào)試運(yùn)行的每一步自動(dòng)輸出該變量的值
bt#顯示當(dāng)前的函數(shù)調(diào)用堆棧情況
list [行數(shù)]#顯示當(dāng)前執(zhí)行的代碼,默認(rèn)10行
watch [變量名]#設(shè)置變量監(jiān)視點(diǎn),在變量值改變時(shí)暫停程序。
info breakpoints#顯示當(dāng)前已設(shè)置的斷點(diǎn)列表。
info watchpoints#顯示當(dāng)前已設(shè)置的監(jiān)視點(diǎn)(觀察點(diǎn))列表。
info functions#顯示程序中定義的所有函數(shù)列表。
info variables#顯示程序中定義的所有全局變量和靜態(tài)變量列表。
info locals#顯示當(dāng)前函數(shù)的局部變量信息。
info args#顯示當(dāng)前函數(shù)的參數(shù)信息。
info threads#顯示當(dāng)前正在運(yùn)行的所有線程信息。
info registers#顯示當(dāng)前線程的寄存器值。
info frame#顯示當(dāng)前的調(diào)用幀信息。
info sharedlibrary#顯示加載的共享庫(kù)信息。
info inferior#顯示當(dāng)前程序的執(zhí)行狀態(tài)信息。
info record#顯示反復(fù)執(zhí)行的命令數(shù)量。
info breakpoints location < address >#顯示指定地址上設(shè)置的斷點(diǎn)信息。
info break
2.5 多線程調(diào)試
info thread#命令查看當(dāng)前線程的信息
info threads#命令查看當(dāng)前所有線程
frame [棧幀號(hào)] #命令切換到指定的棧幀
thread [線程號(hào)]#切換到指定線程
-
程序
+關(guān)注
關(guān)注
117文章
3787瀏覽量
81043 -
調(diào)試工具
+關(guān)注
關(guān)注
1文章
49瀏覽量
12637 -
gdb
+關(guān)注
關(guān)注
0文章
60瀏覽量
13303
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論