簡述 GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing a ...
簡述
GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing at the moment it crashed.
GDB, GNU項目調試器,允許你看到在另一個程式執行時“內部”發生了什麼——或者另一個程式在崩潰時正在做什麼。
使用
準備工作
要想使用gdb進行源碼級別的調試,需要用gcc編譯(不是鏈接)時候加上-g
選項。這樣調試生成的程式才能夠顯示源碼,否則只能進行彙編級別的調試。
通常進行編譯時候不止加入-g
,還會關閉編譯器優化-O
。另外,-Wall
可以在編譯時候發現一些問題,避免一些不必要的bug。
開始
首先通過gdb 程式名
來啟動gdb去調試該程式。
命令 | 說明 | 示例 |
---|---|---|
基本 | ||
q/quit | 退出 | |
help | 幫助,可具體指定哪個命令 | help info |
set args 參數... | 給程式設置參數 | set args 1 2 |
show args | 顯示當前 | |
start | 程式運行並停在第一行 | |
r/run | 程式運行併到斷點才停止 | |
c/continue | 繼續運行直到下一個斷點 | |
n/next | 執行一條一句(不會進入函數體) | |
s/step | 執行一條一句(進入函數體) | |
until | 繼續運行至退出迴圈或遇到下一個斷點 | |
finish | 繼續運行至跳出函數體或遇到下一個斷點 | |
查看代碼相關 | ||
l/list | 顯示當前文件代碼 | |
l 行號 | 顯示指定行號前後文 | list 10 |
l 函數名 | 顯示指定函數 | list main |
l 文件名:行號 | 顯示指定文件代碼 | list ot.cpp:1 |
l 文件名:函數名 | 顯示指定文件代碼 | list ot.cpp:fun |
show list/listsize | 顯示list時候的行數 | |
set list/listsize 行數 | 設置list時候顯示的行數 | set list 20 |
斷點 | ||
b/break 行號 | 在當前文件指定行打斷點 | b 10 |
b 函數名 | 在當前文件指定函數打斷點 | b fun |
b 文件名:行號 | 在指定文件指定行打斷點 | b ot.cpp:10 |
b 文件名:函數名 | 在指定文件指定函數打斷點 | b ot.cpp:fun |
b 位置 if 條件 | 設置條件斷點(一般用於迴圈位置) | b 23 if i==2 |
i/info b | 查看斷點信息 | |
d/del/delete 斷點編號 | 刪除指定斷點 | d 2 |
dis/disable 斷點編號 | 使指定斷點無效 | dis 2 |
ena/enable 斷點編號 | 使指定斷點生效 | ena 2 |
變數 | ||
p/print 變數名 | 列印變數值 | p var |
ptype 變數名 | 列印變數類型 | ptype var |
set var 變數名=值 | 設置變數值 | set var i=6 |
display 變數名 | 每次暫停自動列印變數的值 | display var |
i/info display | 查看自動列印變數列表 | |
undisplay 編號 | 取消自動列印 | undisplay 2 |