GDB调试入门
啟動(dòng)gdb
gdb -tui:分屏顯示源代碼
gdb -q:不顯示開始的提示信息
可以在.bashrc中加入
alias gdb="gdb -q -tui"開始調(diào)試
執(zhí)行run(需要提前設(shè)置斷點(diǎn)),也可以在調(diào)試過程中重新運(yùn)行調(diào)試的程序,run后可以跟隨發(fā)給該程序的任何參數(shù)。
常用命令
| list(簡(jiǎn)寫l) | 顯示當(dāng)前行前面和后面的10行代碼 |
| list n1 n2 | 顯示n1到行和n2行之間的代碼 |
| list main | 顯示main函數(shù)代碼 |
| info functions regex | 列出符合正則表達(dá)式的函數(shù)名稱 |
| info breakpoints(簡(jiǎn)寫info b) | 查看當(dāng)前所有的斷點(diǎn)信息(斷點(diǎn)號(hào),斷點(diǎn)類型,斷點(diǎn)位置) |
| break func | 在當(dāng)前文件的func函數(shù)處設(shè)置斷點(diǎn) |
| break fileName:N | 在某文件的第N行處設(shè)置斷點(diǎn),當(dāng)前文件第N行設(shè)置斷點(diǎn)可以忽略fileName |
| break func(或fileName:N) if exp | 條件斷點(diǎn),exp成立則斷點(diǎn) |
| delete N | 刪除第N號(hào)斷點(diǎn) |
| delete | 刪除所有斷點(diǎn) |
| clear N | 清除第N行上的斷點(diǎn) |
| watch exp | exp成立程序停住 |
| next(簡(jiǎn)寫n) | 單步執(zhí)行,遇到函數(shù)會(huì)跳過 |
| next N | 執(zhí)行N次單步執(zhí)行 |
| step(簡(jiǎn)寫s) | 單步執(zhí)行,遇到函數(shù)會(huì)進(jìn)入 |
| finish | 執(zhí)行完當(dāng)前函數(shù),返回到調(diào)用它的位置 |
| continue | 運(yùn)行到下一個(gè)斷點(diǎn)處 |
| until(簡(jiǎn)寫u) | 鼠標(biāo)放到代碼行,運(yùn)行到該代碼行停止 |
| jump N | 跳轉(zhuǎn)到第N行開始執(zhí)行,不會(huì)主動(dòng)在N行停住 |
| run | 重新運(yùn)行調(diào)試的程序,可以帶參數(shù) |
| [Enter] | 直接回車執(zhí)行上次執(zhí)行的命令 |
| print var(簡(jiǎn)寫p) | 查看變量var的值 |
| print /x var | 按16進(jìn)制格式顯示變量值 |
| ptype var | 查看變量var的結(jié)構(gòu)或類型 |
| backtrach | 查看調(diào)用堆棧 |
多進(jìn)程調(diào)試
默認(rèn)設(shè)置下,在調(diào)試多進(jìn)程程序時(shí)GDB只會(huì)調(diào)試主進(jìn)程。但是GDB(>V7.0)支持多進(jìn)程的分別以及同時(shí)調(diào)試。換句話說,GDB可以同時(shí)調(diào)試多個(gè)程序。只需要設(shè)置follow-fork-mode(默認(rèn)值:parent)和detach-on-fork(默認(rèn)值:on)即可。
| parent | on | 只調(diào)試主進(jìn)程(GDB默認(rèn)) |
| child | on | 只調(diào)試子進(jìn)程 |
| parent | off | 同時(shí)調(diào)試兩個(gè)進(jìn)程,gdb跟主進(jìn)程,子進(jìn)程block在fork位置 |
| child | off | 同時(shí)調(diào)試兩個(gè)進(jìn)程,gdb跟子進(jìn)程,主進(jìn)程block在fork位置 |
設(shè)置方法:set follow-fork-mode [parent|child] set detach-on-fork [on|off]
查詢正在調(diào)試的進(jìn)程:info inferiors
切換調(diào)試的進(jìn)程: inferior
添加新的調(diào)試進(jìn)程: add-inferior [-copies n] [-exec executable] ,可以用file executable來分配給inferior可執(zhí)行文件。
其他:remove-inferiors infno, detach inferior
總結(jié)
- 上一篇: 一个完整的gdb调试过程以及一些常用的命
- 下一篇: 有关EMMC、Nandflash、SSD