注:Linux下輸入 * 號時,前面需要加\(轉義符),即\*。因爲Linux下的*代表所有文件。
啓動gdb - gdb 程序名 [corefile]
corefile是可選的,但能增強gdb的調試能力。
Linux默認是不生成corefile文件的,所以需要在.bashrc文件中添加
ulimit –c unlimited(修改.bashrc文件後記得 . .bashrc 讓修改生效)
爲了能調試程序,makefile文件中,.c.o標號下需寫爲:(加上-g)
.c.o:
$(CC) -Wall -g -o $@ -c $<
如上圖所示,make 編譯鏈接,運行可執行文件時出錯,此時發現多了core.5691文件,只能用gdb打開,gdb靠core文件提示你程序哪裏出錯。若用gdb –q mycal core.5691,即中間加上-q,可去除gdb版本號等信息。
或者可以先用gdb運行程序,再用run命令:
gdb mycal -q
runrun之後:
where 只顯示出錯的行的代碼
list 顯示出錯的代碼的上下十行內的代碼,list也可以帶參數
print i 顯示變量i的值
break 設置斷點
break linenum 在某一行設置斷點
break funcname 在某個函數設置斷點
break filename:linenum 在其他文件中某行設置斷點
break filename:funcname 在其他文件中某函數設置斷點
注:可以設置多個斷點,info break 查看有多少斷點,delete 刪除一個斷點
continue 從斷點以後繼續執行
改變一個變量的值
set variablevarname = value,varname是變量的名稱,value是變量的新值。
即用以上命令使得動態改變變量的值。
單步調試
step命令: 每次執行一條語句,相當於step into
next命令: 當遇到一個函數,next將執行整個函數,相當於step over
return [value]命令:停止執行當前函數,相當於step return
注:gdb記住了最後一個被執行的命令,因此若需要重複執行某條命令,不需要每次都鍵入命令。