GDB调试器使用指南 - 来自awesome-cheatsheets项目的精华总结

GDB调试器使用指南 - 来自awesome-cheatsheets项目的精华总结

awesome-cheatsheets 超级速查表 - 编程语言、框架和开发工具的速查表,单个文件包含一切你需要知道的东西 :zap: awesome-cheatsheets 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-cheatsheets

前言

GDB(GNU Debugger)是Linux环境下最强大的调试工具之一,对于开发者而言掌握GDB的使用技巧至关重要。本文将基于awesome-cheatsheets项目中的GDB速查表,系统性地介绍GDB的各类实用命令和调试技巧,帮助开发者快速掌握这一强大工具。

一、GDB基础入门

1.1 启动GDB

GDB有多种启动方式,适用于不同调试场景:

gdb 可执行文件          # 调试普通可执行程序
gdb 可执行文件 core文件  # 调试崩溃后的core dump文件
gdb -p 进程ID          # 附加到正在运行的进程进行调试
gdb -tui              # 启动文本用户界面(TUI)模式

启动后,可以使用file命令手动加载可执行文件。TUI模式提供了源代码和汇编代码的并行显示,非常适合调试复杂问题。

1.2 获取帮助

GDB内置了完善的帮助系统:

help                  # 显示所有命令分类
help running         # 查看运行相关命令帮助
help breakpoints     # 查看断点相关命令帮助

二、断点管理

2.1 设置断点

断点是调试的核心功能,GDB提供了多种设置方式:

break main           # 在main函数入口设置断点
break 101           # 在当前文件的101行设置断点
break basic.c:foo   # 在指定文件的foo函数设置断点
break *0x00400448   # 在内存地址设置断点

2.2 断点管理命令

info breakpoints     # 查看所有断点信息
delete 2            # 删除2号断点
disable 3           # 暂时禁用3号断点
enable 3            # 重新启用3号断点

2.3 高级断点功能

watch variable      # 监视变量变化
rbreak regex        # 使用正则表达式设置断点
condition 1 i>10    # 为1号断点设置条件(i>10时触发)

三、程序执行控制

3.1 基本执行命令

run                 # 启动程序执行
continue           # 继续执行到下一个断点
step               # 单步进入(会进入函数内部)
next               # 单步跳过(不进入函数)
finish             # 执行完当前函数并暂停

3.2 参数设置

set args arg1 arg2  # 设置程序启动参数
show args          # 显示当前参数设置

四、数据查看与分析

4.1 变量查看

print variable      # 打印变量值
print /x variable  # 十六进制格式打印
x/10xb &array      # 以十六进制字节格式查看数组前10个元素

4.2 类型信息

ptype struct_var    # 查看结构体定义
whatis expression  # 查看表达式类型

4.3 栈帧分析

bt                 # 打印调用栈(backtrace)
frame              # 显示当前栈帧
up                 # 向上移动栈帧
down               # 向下移动栈帧

五、多线程与多进程调试

5.1 线程调试

info threads       # 查看所有线程
thread 2           # 切换到2号线程
break main thread all # 在所有线程的main函数设置断点

5.2 进程调试

info inferiors     # 查看所有进程
inferior 2         # 切换到2号进程
set follow-fork-mode child # 跟踪子进程

六、汇编级调试

对于需要深入分析的问题,可以进行汇编级调试:

disassemble main   # 反汇编main函数
stepi              # 单步执行一条机器指令
info registers     # 查看寄存器内容
x/i $pc           # 查看当前指令

七、实用技巧

  1. 命令历史:直接按回车会重复执行上一条命令
  2. 定义宏:使用define命令可以创建自定义命令组合
  3. shell命令:在GDB中可以使用shell执行外部命令
  4. 脚本化调试:使用source命令加载预先编写的调试脚本

八、图形界面工具

虽然GDB本身是命令行工具,但有许多图形前端可用:

  • GDB TUI:内置的文本界面(启动时加-tui参数)
  • CGDB:基于终端的图形前端
  • GDBGUI:基于Web的图形界面

结语

GDB是一个功能极其强大的调试工具,本文仅涵盖了其核心功能。实际调试时,建议结合help命令探索更多高级功能。掌握GDB可以显著提高调试效率,是每个Linux开发者必备的技能。

记住:调试是一门艺术,而GDB是你最好的画笔。随着使用经验的积累,你会逐渐发现更多高效的使用技巧,让调试过程变得更加得心应手。

awesome-cheatsheets 超级速查表 - 编程语言、框架和开发工具的速查表,单个文件包含一切你需要知道的东西 :zap: awesome-cheatsheets 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-cheatsheets

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀谦熹Glynnis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值