# GDB介绍及简单使用

GDBGNU Debugger的缩写,是GNU软件系统中的标准调试器, 很多类UNIX系统都可以使用GDBGDB主要用来调试C/C++编写的程序,也可以用来用来调试Pascal/FORTRAN/D等语言编写的程序。GDB最早由犹太裔美国人理查德·马修·斯托曼于1988年编写,后基于GNU GPL`协议公开发布。

# 基本用法

要使用GDB需要在编译c/c++程序时带上编译参数-g,如:

g++ -g foo.cpp -o foo

然后通过gdb命令来运行程序,如:

gdb [executable]

gdb命令可以直接运行程序,也可以调试程序,在运行程序时,可以通过run命令运行程序,在调试程序时,可以通过break设置断点,然后通过continue命令运行程序,当程序运行到断点处时,程序会自动停止。常用调试命令如下:

  • run 运行程序
  • list 查看源码信息
  • break 设置断点
  • disable 禁用断点,如disable break_point1
  • enable启用断点,如enable break_point1
  • delete删除断点等,如delete breakpoint 1
  • continue 运行程序,直到遇到断点
  • next 运行下一行
  • step 进入函数内部
  • finish/fin 执行直到当前函数运行结束,如何有返回值会打印返回值
  • backtrace 查看调用栈
  • info args 查看参数
  • info locals 查看局部变量
  • print 打印变量值/寄存器值
  • disassemble 查看源代码相关的汇编代码
  • quit 退出gdb

常用命令示例:

# 查看某个寄存器的值:
p $rdx

# 设置某个寄存器的值
set $rdx = 0x10

# 查看环境变量
show environment [KEY]

# 查看汇编代码

  • 直接输入命令disassemble
> disassemble

查看当前函数的汇编代码

  • 查看特定地址的汇编代码
# x命令是用来查看内存地址的值,i命令是用来查看指令的
# > x/FMT ADDDRESS

> x/i 0xaddress
  • 查看特定源文件对应函数的汇编代码
disassemble /m 'source.cpp'::add

# Text User Interface(TUI)

使用GDB的时候可以借助文本用户界面Text User Interface来提升代码调试的体验。使用TUI可以同时查看源码,汇编代码和控制调试指令输入。

  • 可以通过以下指令启动gdbTUI模式
> gdb -tui
  • 使用layout next命令来启动TUI,同时展示汇编和源码窗口
> layout next
  • 使用layout split命令来启动TUI,同时展示汇编和源码窗口
> layout split
  • 使用layout regs命令来查看寄存器信息
> layout regs
  • 使用layout asm命令来查看汇编代码
> layout asm
  • 使用layout src命令来查看源代码
> layout src

窗口切换的快捷键:

  • 只显示源代码窗口
Ctrl + X 1
  • 打开汇编代码窗口
Ctrl + X 2

# refernece

1.https://www.sourceware.org/gdb/documentation/ (opens new window)