GDB(GNU Debugger) 的详细介绍、安装指南及使用说明

GDB(GNU Debugger) 的详细介绍、安装指南及使用说明

GDB:程序员的调试利器

一、GDB 简介

GDB 是 GNU 组织开发的经典源代码级调试工具,支持对 C、C++、Go、Ada 等语言编写的程序进行深度调试。它通过 反汇编代码分析、内存状态监控 和 进程控制,帮助开发者定位程序漏洞、内存泄漏和逻辑错误。其核心功能包括:

断点管理:在代码特定位置暂停执行变量跟踪:查看局部/全局变量的值堆栈回溯:分析函数调用链信号处理:捕获和处理运行时异常(如 SIGSEGV)多线程调试:同步追踪多个线程状态

二、安装指南

1. 系统要求

操作系统支持版本依赖库LinuxUbuntu 20.04+/Debian 11+gcc、binutils、glibcWindows10/11 (64位)MinGW-w64、MSYS2macOS10.15+Xcode Command Line Tools

2. 安装步骤

Linux/macOS

# Linux (Debian/Ubuntu)

sudo apt update

sudo apt install gdb

# macOS

brew install gdb

Windows

# 下载 MinGW-w64 工具链

https://sourceforge.net/projects/mingw-w64/files/

# 设置环境变量(将mingw64/bin加入PATH)

setx PATH "%PATH%;C:\mingw64\bin"

三、基本使用指南

1. 启动调试会话

# 编译带调试信息的程序(-g选项)

gcc -g -o my_program my_program.c

# 启动GDB并加载程序

gdb ./my_program

2. 核心操作命令

查看代码与断点

# 列出源代码(当前文件)

list

# 在第10行设置断点

break 10

# 在函数入口处设置断点

break main

运行与控制

# 运行程序(遇到断点暂停)

run

# 继续执行直到下一个断点

continue

# 单步执行(进入函数)

step

# 单步跳过函数调用

next

查看变量与堆栈

# 打印变量值

print variable_name

# 查看当前堆栈帧

backtrace

# 查看局部变量

info locals

内存操作

# 查看内存地址内容(十六进制)

x/100bx 0x7fffffffedc0

# 修改内存值

set *0x7fffffffedc0 = 0xdeadbeef

四、高级功能使用

1. 多线程调试

查看所有线程状态

info threads

切换到指定线程

thread 2

2. 信号处理

捕获 SIGSEGV 异常

handle signal segfault print

run

3. 自定义调试脚本

使用 Python 编写 GDB 命令扩展

class MyCommand(gdb.Command):

def __init__(self):

super().__init__("mycmd", gdb.COMMAND_USER)

def invoke(self, arg, from_tty):

print("Hello from custom command!")

MyCommand()

五、典型调试场景

案例:定位数组越界漏洞

编译程序:

gcc -g -o array_vuln array_vuln.c

运行 GDB:

gdb ./array_vuln

break main

run

逐步调试:

# 当程序崩溃时查看堆栈

backtrace

# 发现越界访问位置

x/10ax array

六、配置说明

1. GDB 配置文件

创建 .gdbinit 文件(放在项目根目录):

# 设置默认断点模式

set disassembly-flavor intel

set print pretty on

2. 环境变量配置

# 在 Shell 中永久生效

export GDBINIT=~/.gdbinit

七、常见问题与解决方案

问题现象解决方案"No symbol table" 错误确保编译时添加 -g 参数无法调试多线程程序启用 set scheduler-locking on内存泄漏难以追踪结合 Valgrind 使用调试慢速程序使用 set pagination off 关闭分页

八、学习资源

https://sourceware.org/gdb/current/onlinedocs/gdb/

https://ocw.mit.edu/courses/6.828j-fall-2004/unit-iii/debugging-gdb/

相关推荐

讨鬼传攻略秘籍专题(最强武器及新手武器选择推荐)
卾开头的车牌是哪个省的?
365bet亚洲网址

卾开头的车牌是哪个省的?

📅 07-26 ❤️ 808
养殖鱼鲫鱼不吃食怎么回事(鲫鱼不喂食最长能活多久)