GDB调试深度探索:从基础到高级技巧

需积分: 34 37 下载量 12 浏览量 更新于2024-07-20 1 收藏 901KB PDF 举报
"gdb使用技巧" gdb(GNU Debugger)是Linux和其他Unix-like操作系统下广泛使用的C/C++程序调试工具。这篇文档详尽地介绍了gdb的各种使用技巧,涵盖了从基本操作到高级特性的各个层面,帮助开发者更有效地调试程序。 1. 信息显示: - 显示gdb版本信息:`show version` 命令可以查看gdb的当前版本。 - 显示gdb版权相关信息:使用 `show copyright` 命令查看gdb的版权信息。 - 启动时不显示提示信息:启动gdb时可以添加`--quiet`选项来避免显示欢迎信息。 - 退出时不显示提示信息:配置环境变量`GDB_TERMINATE_SIGNAL`为SIGKILL可避免退出提示。 - 不暂停输出:设置`set pagination off`可使gdb在输出大量信息时不暂停。 2. 变量: - 设置变量值:`set variable var = value` 命令用于更改变量的值。 3. 字符串: - 打印ASCII和宽字符:使用`print`命令结合格式化字符串来打印ASCII和宽字符。 - 改变字符串值:通过设置变量的方式修改字符串内容。 4. 函数: - 列出函数名:`info functions` 命令可以列出已知的函数名。 - 进入/退出调试:`step` 和 `finish` 命令分别用于进入函数和退出当前函数。 - 直接执行函数:`call function_name()` 可以在当前上下文中执行函数。 - 堆栈帧操作:`frame` 命令用于选择和切换函数堆栈帧,`backtrace` 查看函数调用栈。 5. 断点: - 设置断点:可以基于匿名空间、地址、入口点、文件行号等设置断点,如`break <location>`。 - 保存断点:`save breakpoints filename` 保存断点设置,`load breakpoints filename` 加载。 - 条件断点:`break <location> if condition` 在满足条件时才暂停。 6. 观察点: - 设置观察点:`watch expr` 监视变量的改变,`rwatch expr` 监视读操作,`rwatch expr` 监视读写操作。 - 特定线程:`watch -t thread_num expr` 限制观察点只对特定线程有效。 7. Catchpoint: - 一次性触发:`catch once <event>` 只让catchpoint触发一次。 - 系统事件:如`catch fork`、`catch vfork`、`catch exec`、`catch syscall` 分别对应特定的系统调用。 8. 打印: - 打印各种内容:包括STL容器、大数组、函数局部变量、内存、内存块、源代码行等。 - 指定输入输出:`set debug-file descriptor` 和 `set logging redirect` 可以改变输入输出设备。 - 特殊变量:`$_` 和 `$_$__` 分别表示最后一个表达式的结果和上一个结果的拷贝。 9. 多进程/线程: - 调试已运行进程:`attach pid` 命令附加到进程。 - 调试子进程:`set follow-fork-mode child` 配置gdb跟随子进程。 - 查看线程:`info threads` 显示所有线程信息。 - 控制线程行为:如`thread`命令切换线程,`set non-stop on/off` 控制是否同时运行所有线程。 通过熟练掌握这些技巧,开发者可以更高效地定位和修复程序中的错误,提升开发效率,确保软件质量。gdb的灵活性和强大功能使得它成为C/C++开发者的得力助手。