
最近項目需要用到gdb調(diào)試程序, 鑒于每次用時都要google回憶下常用的命令,效率有點(diǎn)low,故整理份命令備忘錄,如下:
GDB Layout命令
每次gdb時不知道程序跑到哪了,只能list?? 錯, layout窗口才是王道!!
| 命令 | 功能 |
|---|---|
| layout src | 顯示源碼窗口 |
| layout asm | 顯示匯編窗口 |
| layout split | 顯示源碼 & 匯編窗口 |
| layout regs | 顯示匯編 & 寄存器窗口 |
| layout next | 下一個layout |
| layout prev | 上一個layout |
| C-x 1 | 單窗口模式 |
| C-x 2 | 雙窗口模式 |
| C-x a | 回到傳統(tǒng)模式 |
GDB 跳轉(zhuǎn)執(zhí)行命令
| 命令 | 功能 |
|---|---|
| start | 開始啟動程序,并停在main第一句等待命令 |
| step | 執(zhí)行下一行語句, 如語句為函數(shù)調(diào)用, 進(jìn)入函數(shù)中 |
| next | 執(zhí)行下一行語句, 如語句為函數(shù)調(diào)用, 不進(jìn)入函數(shù)中 |
| finish | 連續(xù)運(yùn)行到當(dāng)前函數(shù)返回為止 |
| continue | 從當(dāng)前位置繼續(xù)運(yùn)行程序 |
| return | 強(qiáng)制令當(dāng)前函數(shù)返回 |
| call func() | 強(qiáng)制調(diào)用函數(shù), 也可以用print func() |
| run | 從頭開始運(yùn)行程序 |
| quit | 退出程序 |
注: call func() 與 print func() 的區(qū)別,在于調(diào)用void函數(shù)時, call func()沒有返回值, 而print有~~
GDB調(diào)試輸出命令
| 命令 | 功能 |
|---|---|
| 輸出變量值 & 調(diào)用函數(shù) & 通過表達(dá)式改變變量值 | |
| info var | 查看全局 & 靜態(tài)變量 |
| info locals | 查看當(dāng)前函數(shù)局部變量 |
| list | 查看當(dāng)前位置代碼 |
| backtrace | 查看各級堆棧的函數(shù)調(diào)用及參數(shù) |
| set var 變量=xx | 將變量賦值為xx |
注:
p/x 3*i -- x for hexadecimal, o for octal, d for decimal, f for float, c for char, s for string
斷點(diǎn)
| 命令 | 功能 |
|---|---|
| b N_LINE | 在第N_LINE行上設(shè)置斷點(diǎn) |
| b func | 在func函數(shù)上設(shè)置端點(diǎn) |
| delete breakpoints | 刪除斷點(diǎn) |
| disable breakpoints | 禁用斷點(diǎn) |
| enable 斷點(diǎn)號 | 啟動端點(diǎn) |
| info breakpoints | 查看斷點(diǎn)列表 |
| break foo if x>0 | 設(shè)置條件斷點(diǎn) |
觀察點(diǎn)
當(dāng)待觀察點(diǎn)被讀 或 被寫時,程序停下來,并輸出相關(guān)信息
| 命令 | 功能 |
|---|---|
| watch | 設(shè)置寫觀察點(diǎn) |
| rwatch | 設(shè)置讀觀察點(diǎn) |
| awatch | 設(shè)置讀寫觀察點(diǎn) |
| info watchpoints | 查看觀察點(diǎn)列表 |
Display跟蹤點(diǎn)
| 命令 | 功能 |
|---|---|
| display var | 每次停下來時,顯示設(shè)置的變量var的值 |
| undisplay | 取消跟蹤顯示 |
| info display | 設(shè)置讀寫觀察點(diǎn) |
| info watchpoints | 查看跟蹤列表 |