概述
gdb 提供深度调试功能,包括控制程序的执行流程、检查变量值以及查看内存状态。它在分析已编译二进制文件的底层问题时特别有用。
主要功能
- 启动/停止正在运行的程序
- 设置断点 (breakpoint)
- 检查和修改变量值
- 查看堆栈跟踪 (stack trace)
- 检查内存内容
- 分析核心文件 (core file)
主要选项
gdb 主要以交互模式使用,但您可以在启动时使用特定选项进行初始设置或执行非交互式脚本。
启动/连接选项
生成的命令:
请尝试组合命令。
描述:
`gdb` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
使用示例
gdb 通常以交互方式使用,因此示例也包括在 gdb 提示符下输入的命令。
开始基本调试会话
gdb ./my_program
使用 gdb 加载已编译的程序(例如 my_program)以启动调试会话。
设置断点并运行
gdb ./my_program
(gdb) b main
(gdb) r
在 main 函数上设置断点并运行程序。程序将在断点处停止。
检查变量值
gdb ./my_program
(gdb) b my_function
(gdb) r
(gdb) p my_variable
在断点处停止后,打印特定变量的当前值。
分析核心文件
gdb ./my_program core.dump
使用程序崩溃生成的 core 文件来分析程序崩溃时的状态。
连接到正在运行的进程
gdb -p 12345
将 gdb 连接到已运行的进程 ID (PID) 12345 进行调试。
启动时自动执行命令
gdb -ex 'b main' -ex 'r' ./my_program
在 gdb 启动时同时设置 main 函数的断点并运行程序。
安装
gdb 通常不包含在大多数 Linux 发行版中,需要作为开发工具包的一部分进行安装。
Debian/Ubuntu
sudo apt update && sudo apt install gdb
使用 APT 包管理器安装 gdb。
Fedora/CentOS/RHEL
sudo dnf install gdb
使用 DNF 或 YUM 包管理器安装 gdb。
提示与注意事项
有效使用 gdb 的技巧和注意事项。
编译时包含调试信息
要使用 gdb 进行调试,您需要使用 `-g` 选项编译程序以包含调试信息。否则,您将无法查看源代码信息或变量名。
- 示例:`gcc -g myprogram.c -o myprogram`
常用 gdb 命令
在 gdb 提示符下常用的核心命令。
- `b <函数名/行号>`: 设置断点 (breakpoint)
- `r`: 运行程序 (run)
- `n`: 执行下一行 (next)
- `s`: 进入函数 (step)
- `p <变量名>`: 打印变量值 (print)
- `c`: 继续执行直到下一个断点 (continue)
- `q`: 退出 gdb (quit)
利用 TUI 模式
利用 gdb 的文本用户界面 (TUI) 模式,您可以同时查看源代码、寄存器和汇编代码,从而提高调试效率。
- `gdb -tui <program>` 或在 gdb 中使用 `layout src` 命令