GDB#
如何使用 GDB#
首先,将程序编译并包含调试信息,然后在启动 GDB 时使用 --args
选项直接传递参数:
gdb --args myprogram arg1 arg2
进入 GDB 后,直接使用 run
命令即可。
设置断点、单步调试、打印调用栈#
命令 |
描述 |
示例 |
---|---|---|
|
设置断点 |
|
|
在指定函数的指定行设置断点 |
|
|
在指定内存地址设置断点 |
|
|
反汇编函数 |
|
|
查看断点编号 |
|
|
删除断点 |
|
|
在条件为真时停在断点处 |
|
|
列出参数列表 |
|
|
将指定文件加载到 GDB 中 |
|
|
执行已加载的可执行程序 |
|
|
继续执行源代码,停在下一个断点处 |
|
|
执行一行源代码(会跳转到函数调用内部) |
|
|
执行一条 x86 指令(会跳转到函数调用内部) |
|
|
执行一行源代码(不会跳转到函数调用内部) |
|
|
执行一条 x86 指令(不会跳转到函数调用内部) |
|
|
终止当前调试会话 |
|
|
打印栈轨迹,打印每个函数和它们的参数 |
|
|
打印栈轨迹 |
|
|
打印当前调用栈 |
|
|
退出 GDB |
|
监视变量、寄存器和内存#
命令 |
描述 |
示例 |
---|---|---|
|
打印表达式的值 |
|
|
打印表达式的值(16 进制表示) |
|
|
打印内存地址中的值 |
|
|
反汇编某个函数 |
|
调试过程中修改源代码#
如果在调试过程中需要修改源代码,可以按照以下步骤操作:
使用
Ctrl+z
暂时将 GDB 挂起;修改源代码;
使用命令
jobs
查看后台进程;使用
fg proc_num
恢复;使用
run (args)
重新定位到上次离开的地方。
启用 TUI 增强调试体验#
layout
命令允许我们在调试源代码的同时,显示源代码。
命令 |
描述 |
示例 |
---|---|---|
|
未处于调试模式,进入 TUI 模式 |
|
|
已处于调试模式,进入 TUI 模式 |
|
|
展示下一个子窗口 |
|
|
展示上一个子窗口 |
|
|
展示源代码 |
|
|
展示汇编代码 |
|
|
同时展示源代码和汇编代码 |
|
|
在展示源代码的同时,展示寄存器中的值 |
|
|
聚焦于下一个子窗口 |
|
|
聚焦于上一个子窗口 |
|
|
聚焦于源代码子窗口 |
|
|
聚焦于汇编代码子窗口 |
|
|
聚焦于寄存器子窗口 |
|
|
聚焦于命令行子窗口 |
|
|
退出 TUI 模式 |
|
|
重新加载 TUI 模式 |
|