gdb(GNU DeBugger)
2010-09-11 09:33:52 阿炯

GDB(GNU DeBugger)是一个调试器,这对一个程序员是必不可少的,是GCC的标准组件之一。能为十几种不同的处理器架构的软件进行调试,支持的语言有 Ada、C、C++、Fortran、Go、Rust 等,可以在最流行的 GNU/Linux、Unix 和 Windows 变体上运行,并且调试十几种不同的处理器架构。


gdb的功能非常强大,但如果把友好的图形化的界面作为衡量的主要标准之一,那么现阶段在Linux下的确缺少好的调试器。GDB 的全称是 GNU Debuger,是 linux 底下的一种免费的 debug 程序。虽然界面不像 SoftIce 那么好,但是功能也绝对强大。

要使用 gdb 那么首先在你 compile 程式的时候,要加上 -g 的选项。(可以用-g, -g2, -g3具体请看 man gcc)通常如果程序不会很大,在 compile 的时候我都是用 -g3 的,因为如果你用到了 inline 的 function,用 -g 去 compile 就无法去 debug inline function了。这时候就用到 -g2, -g3了,g后面的数字越大,也就是说可以 debug 的级别越高,最高级别就是 -g3。此外GDB也是个具有移携性的侦错器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支持除错的编程语言有C、C++、Pascal以及FORTRAN。

最新版本:7.8
该版本支持 Guile 语言的脚本;更好的 Python 脚本;支持在 little-endian PowerPC64 系统调试;能处理 C99 可变长度数组等。

最新版本:10.2
GNU 调试器 GDB 10.2 已经于2021年4月未旬发布。主要更新内容:
AddressSanitizer: remote_async_inferior_event_handler 中 extended_remote_target 的堆在使用后释放
修复内部错误: void target_mourn_inferior(ptid_t): assert `ptid == inferior_ptid' 失败。操作系统:Mac OSX Catalina;编译器:GCC;语言:C
修复 gdb 内部错误: 用 qemu 调试 linux 内核时,未知的 CFA 规则
修复数组下标由于没有大小的灵活数组成员而报错的问题
修复当不包括新布局中的状态窗口时,gdb 崩溃的问题
修复静态成员参数的 Value.format_string 文档错误
将 rust_demangler 添加到 10.x 分支
修复无法使用 gcc-4.8 编译 arc.c的问题
修复局部变量在 sparc64 上具有错误地址和值的问题
详细内容请查看更新公告

最新版本:13
开源代码调试解决方案 GNU Debugger(简称 GDB)13.1 已于2023年2月中旬发布,新版本的 GDB 和 GDB 服务器添加了两个新的目标架构支持:Linux 下的 LoongArch 和 C-SKY 处理器架构。LoongArch Linux 支持还包括浮点支持。除了新增 C-SKY 和 LoongArch Linux 支持之外,GDB 13.1 还增加了:
对处理 Arm/AArch64 上的线程本地存储 (TLS) 变量的支持
对 FreeBSD AArch64 的硬件观察点支持
Python API 添加
对 ELF 的 Zstd 压缩调试部分的支持
删除 DBX 模式支持
以及各种其他增强功能。
此外,GDB 13.1 ELF 二进制文件中的 Zstd 调试部分支持遵循 GNU 工具链(以及 LLVM),添加了 Zstd 压缩数据支持,包括即将推出的 GCC 13。

最新版本:14
14.1 现已于是2023年12月上旬发布。主要更新内容如下:
GDB 不再支持 AiX 4.x、5.x 和 6.x。支持的最低版本为 AiX 7.1。GDB/MI 版本 1 支持已被删除
对 Debugger Adapter Protocol (DAP) 的初始内置支持
GDB 现在可以识别 NO_COLOR 环境变量
初步支持大于 64 位的整数类型
Breakpoints 现在可以是 inferior-specific
新的 convenience function "$_shell",用于执行 shell 命令并返回其结果。
Python、GDB/MI 支持
支持启用或禁用单个远程目标功能
新的 “no-history” 停止原因
支持 inferior-specific breakpoints
在 breakpoint-created  的通知中和 -break-insert 命令的结果中出现的 bkpt 元组现在可以包含一个可选的 "inferior" 字段,用于 main breakpoint 和每个位置(如果 breakpoint 是 inferior-specific)。
尝试使用不存在的 thread ID 创建 thread-specific breakpoint 现在会导致错误
新增 "simple-values-ref-types"-list-feature 值,指示各种命令中的 --simple-values 选项如何考虑引用类型。
增强的 AArch64 支持
对 Scalable Matrix Extension (SME) 和 Scalable Matrix Extension 2 (SME2) 的初步支持
增强的 Ada 支持
各种各样的
“list” 命令现在接受 “.” 作为参数,告诉 GDB  print 当前帧内执行点周围的位置。
printf 和 dprintf 命令的新 “% V” 输出格式。
printf 命令现在将从 inferior 获取的字符串大小限制为 "max-value-size" 设置的值。
通过新的 --additional-debug-dirs=PATHs 配置选项,支持在配置时扩展 GDB 参数 "debug-file-directory" 的默认值。
新命令 “info main”
新命令 “set tui mouse-events [on|off]”(默认打开)
新命令 “set always-read-ctf on|off”(默认关闭)
各种新的调试和维护命令


项目主页:http://www.gnu.org/software/gdb/