为什么你应该会GDB?「100个GDB小技巧」
GDB(GNU Debugger)是一个非常强大的调试工具,它可以帮助程序员找出程序中的错误和问题。无论是新手还是经验丰富的开发人员,都可以从GDB中获得极大的帮助。
但是,GDB的使用方法和技巧非常多,令人有些头疼。在本篇文章中,我将向大家介绍一个开源的GDB技巧总结,让你轻松掌握这个调试神器,解决程序难题!

内容涵盖如下:
信息显示
函数
断点
观察点
Catchpoint
- 让catchpoint只触发一次
- 为fork调用设置catchpoint
- 为vfork调用设置catchpoint
- 为exec调用设置catchpoint
- 为系统调用设置catchpoint
- 通过为ptrace调用设置catchpoint破解anti-debugging的程序
打印
- 打印ASCII和宽字符字符串
- 打印STL容器中的内容
- 打印大数组中的内容
- 打印数组中任意连续元素值
- 打印数组的索引下标
- 格式化打印数组
- 打印函数局部变量的值
- 打印进程内存信息
- 打印静态变量的值
- 打印变量的类型和所在文件
- 打印内存的值
- 打印源代码行
- 每行打印一个结构体成员
- 按照派生类型打印对象
- 指定程序的输入输出设备
- 使用“$\_”和“$\__”变量
- 打印程序动态分配内存的信息
- 打印调用栈帧中变量的值
多进程/线程
- 调试已经运行的进程
- 调试子进程
- 同时调试父进程和子进程
- 查看线程信息
- 打印所有线程的堆栈信息
- 在Solaris上使用maintenance命令查看线程信息
- 不显示线程启动和退出信息
- 只允许一个线程运行
- 使用“$_thread”变量
- 一个gdb会话中同时调试多个程序
- 打印程序进程空间信息
- 使用“$_exitcode”变量
core dump文件
汇编
改变程序的执行
信号
共享库
脚本
源文件
图形化界面
其它
- 命令行选项的格式
- 支持预处理器宏信息
- 保留未使用的类型
- 使用命令的缩写形式
- 在gdb中执行shell命令和make
- 在gdb中执行cd和pwd命令
- 设置命令提示符
- 设置被调试程序的参数
- 设置被调试程序的环境变量
- 得到命令的帮助信息
- 记录执行gdb的过程
- 打印C++虚表及其内容
内容丰富详细,可以cover工作学习上99%的情形了。
链接如下,拿走不谢!
GitHub - hellogcc/100-gdb-tips: A collection of gdb tips. 100 maybe just mean many here.其它资源
Debugging with GDBGDB命令卡片GDB dashboardGdbinit for OS X, iOS and others - x86, x86_64 and ARMdotgdb:关于底层调试和反向工程的gdb脚本集
编辑于 2023-04-10 23:08