GDB 连接
gdb a.out 或者进入 gdb 后,target remote ip:port
配置
- 全局配置(安装 gdb-dashboard)
wget -P ~ https://raw.githubusercontent.com/cyrus-and/gdb-dashboard/master/.gdbinit
添加 set auto-load safe-path / 到~/.gdbinit的第一行
- 项目配置 通过项目文件夹内的 .gdbinit 写好初始配置
控制流
b <函数名> 在函数进入时设置断点
starti 启动程序,并在第一条指令上暂停
n 执行下一行代码,不进入函数
ni nexti,单步执行一条机器指令,遇到函数调用不进入(单步源代码用 n)
s 执行下一行代码,进入函数
si 步入汇编语句,进入汇编级别的单步执行
c continue 继续执行
查看状态
如果没有安装 gdb-dashboard,可以通过 layout 指令来呈现寄存器等信息,具体查看 help layout
使用 x/<格式> <地址> 来查看内存,例如 x/8i 0x80200000 表示查看 0x80200000 起始的 8 条指令。具体格式查看 help x
bt full backtrace full,打印堆栈信息(含每帧局部变量)
info inferiors 打印进程/线程信息
!cat /proc/15870/maps 打印进程的内存信息
p/a 将变量解释为指针 address,使用十六进制打印
p/c 将变量解释为字符 char,打印为字符
p/o 使用八进制打印变量
p/x 使用十六进制打印变量
p/u 将变量解释为无符号整数 unsigned,使用十进制打印
p/s 将变量解释为字符串,打印输出
help x 查看全部:
场景(debug 某个可执行文件)
file user/_call
b main