GDB

状态:参考

最后更新:

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,单步执行一条机器指令,遇到函数调用不进入(单步源代码用 ns 执行下一行代码,进入函数 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