> 环境与工具 > gdb

gdb: GNU 调试器

gdb (GNU Debugger) 是一个强大的工具,用于分析和调试用 C、C++、Fortran 等多种编程语言编写的程序的执行。它对于理解程序的内部行为、查找和修复错误至关重要。它支持多种调试场景,例如连接到正在运行的进程或分析核心文件。

概述

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` 命令

相同类别命令