Skip to content

Latest commit

 

History

History
77 lines (51 loc) · 2.44 KB

README.md

File metadata and controls

77 lines (51 loc) · 2.44 KB

GDB 入门

介绍

GDB 是 Unix 下的调试工具。

以一个文件开始

假如存在文件 file.c,

首先,需要编译生成可执行文件:gcc -g file.c -o file

随后,才能对其进行 GDB 调试。

CLI

最简单的启动方式:

  • gdb file: 启动 GDB 调试 file.

一些命令行参数:

  • gdb file -tui: 以多个文本窗口的方式呈现调试。

debug command

执行

  • run: 简写为 r, 开始执行文件。如果没有断点,则完整执行程序;如果有断点,则执行到第一个可用断点处。
  • next: 简写为 n, 单步执行,当执行到中断处时,输入 n 会继续执行下一条语句。如果下一条语句是一个函数,会直接返回函数的执行结果。
    • ni: 执行的步长为汇编指令。
  • step: 简写为 s, 单步进入,当执行到中断处时,输入 s 会继续执行下一条语句。如果下一条语句是一个函数,则会进入到函数内部。
    • si: 执行的步长为汇编指令。

断点

  • break: 简写为 b, 设置断点:
    • b function_name: 根据函数名来打断点。
    • b *address: 根据地址来打断点。
  • clear: 删除所选环境中的断点;
  • info break: 简写为 i b, 查看断点信息。

查看内容

  • where: 查看当前所处的地址。
  • whatis: 查看某个变量的数据类型。
  • info: 简写为 i, 用于显示各类信息,可用help i查阅其用法:
    • i registers: 简写为 i r, 查看当前寄存器内的值(除了浮点数寄存器)。
    • i all-registers: 查看所有寄存器内的值。
    • i frame: 简写为 i f, 查看当前堆栈信息。
  • print: 简写为 p,
    • p $register 查看某个寄存器内的值。
  • examine: 简写为 x, 用来查看内存地址中的值
  • list: 打印当前行之后的源码
    • list <line>: 打印 line 行代码
    • list -: 打印当前行前面的代码
  • disas: 显示当前行之后的汇编代码

监控

  • watch: 设置观察点:
    • watch var: 观察一个变量。
    • watch $register: 观察某个寄存器。

清除

  • delete: 清除断点/监控。
    • delete n: 清除第 n 个断点/监控。

显示

  • shell clear: 清屏操作

skills

  • 调试状态下,直接回车表示重复执行上一条命令。
  • watch $pc 后,由于执行单条指令必然改变 pc 值,因此可以借此进入执行单条指令的状态。