參考教程:
Linux gdb調試器用法全面解析
gdb斷點(四)刪除
gdb: how to print the current line or find the current line number?
GDB Error: “The program is not being run”
編譯時:
gcc -g test.c -o test
進入調試:
gdb test.out
list 命令
縮寫 l
- 跟行號
- 跟函數名(run時停止在函數首行)
run 命令
縮寫 r
- 停止在斷點處
- 指定參數路徑等
break 命令
縮寫 b
跟行號
跟函數名
b +offset / -offset,在當前行的前面或後面 offset 行停止
break file:line_num,在源文件的某行停止
break *add,在 add 內存地址停止
break … if condition ,條件斷點,中間…代表是上述命令
查看斷點
info break break_num
縮寫
i b
刪除斷點
delete break_num
縮寫 d n
刪除行斷點
clear func clear 無縮寫
clear file:line_num
clear line_num
單步命令
next 命令
縮寫 n
next count,執行 count 條指令
重複上一條命令:按下回車 。即每一次重複執行上一條指令時,不需要重複輸入,只需回車即可。
附:報錯”The program is not being run.”
程序沒有自動開始運行,此時輸入
start
即可開始調試,注意不要使用run
命令。
step 命令
縮寫 s
- 可以進入函數
- step count
finish 命令
縮寫 f
- 執行程序至當前函數完成,打印堆棧信息和返回值等
until 命令
縮寫 u
- 運行程序至推出循環體
stepi 和 nexti 命令
縮寫分別爲 si 和 ni
- 單步執行機器指令
frame 命令
縮寫 f
- 顯示當前所在的行以及相關信息
continue 命令
縮寫 c
- 程序停止後,continue 執行到結束或斷點處,或進行 watch 的變量變化處
- continue ignore-break-num,忽略多少斷點
print 命令
縮寫 p
print /f,由 f 指定輸出格式
- x 十六進制
- d 十進制
- u 十六進制無符號整型
- o 八進制
- t 二進制
- c 字符格式
- f 浮點格式
動態數組
int *array = (int *)malloc (len * sizeof (int))
查看該動態數組的值:
p *array@len
p {*type*} add ,查看地-址 add 處 type 類型的值
display 命令,設置程序停止時自動顯示的變量
print x = 4,修改變量值
watch 命令
縮寫 w
- 觀察的變量變化時停止程序
- watch exp ,觀察表達式或變量
- rwatch exp,表達式或變量被讀取時,停止程序
- awatch exp,表達式或變量被讀或寫時,停止程序
- info watchpoints,列出所有觀測點