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