简介:本文是一份详尽的GDB使用手册,涵盖基础命令、调试技巧、多线程调试、远程调试及性能优化等核心场景,帮助开发者快速掌握GDB工具链,提升调试效率。
GDB(GNU Debugger)是GNU工具链中的核心调试工具,支持C/C++、Fortran、Go等多种语言。其核心功能包括断点设置、变量监控、堆栈跟踪、内存检查等。安装时需确保版本与GCC编译器匹配(如Ubuntu下sudo apt install gdb)。配置时建议启用-tui模式(gdb -tui)以获得分屏调试体验,或通过.gdbinit文件预设常用命令(如set follow-fork-mode child跟踪子进程)。
-g选项生成调试信息(如gcc -g main.c -o main),缺失符号会导致变量名无法解析。ulimit -c unlimited启用核心转储,调试崩溃时用gdb ./program core快速定位问题。set print pretty on格式化结构体输出,set pagination off禁用分页提升交互效率。gdb <可执行文件>直接加载程序。gdb --args ./program arg1 arg2传递命令行参数。gdb -p <PID>动态调试运行中的进程。quit或简写q,注意未保存的断点会丢失。break <文件名>:<行号>(如break main.c:10)。break <函数名>(支持命名空间,如break Namespace::func)。break <位置> if <条件>(如break 20 if i==5)。tbreak <位置>触发一次后自动删除。info breakpoints显示所有断点及其命中次数。run或简写r,从入口开始执行。continue或简写c,从当前断点恢复。next(n):执行下一行,不进入函数内部。step(s):进入函数内部调试。finish:执行完当前函数并返回调用点。jump <行号>强制跳转到指定位置(可能破坏程序逻辑,慎用)。print <变量名>(如print count),支持格式化输出(print/x count显示十六进制)。watch <变量名>在变量值变化时暂停,适用于检测非法修改。display <表达式>在每次暂停时自动打印(如display i)。x/<n><f><s> <地址>(如x/4xw 0x601000显示4个十六进制字)。n:显示单元数。f:格式(x十六进制,d十进制,s字符串)。s:单元大小(b字节,h半字,w字,g双字)。set {type} <地址> = <值>(如set {int}0x601000=42)。info threads显示所有线程ID及状态。thread <ID>(如thread 2切换到线程2)。break <位置> thread <ID>仅在指定线程触发断点。thread apply all <命令>对所有线程执行命令(如thread apply all bt打印所有线程堆栈)。set scheduler-locking on暂停其他线程,专注调试当前线程。set follow-fork-mode child或parent决定调试目标。attach <PID>动态附加到目标进程,结合info inferior管理多个进程实例。record开始记录程序执行轨迹。reverse-step(rs):反向单步执行。reverse-continue(rc):反向运行到上一个断点。.gdb文件(如break main.c:10\nrun),通过source <脚本>执行。python命令嵌入Python脚本(如python print(gdb.parse_and_eval("i").type)),实现复杂逻辑处理。set debug-file-directory /tmp生成性能数据文件,结合perf工具分析热点。systemtap或eBPF与GDB联动,实时监控系统调用和内核事件。gdbserver :<端口> <可执行文件>(如gdbserver :2345 ./program)。gdb -ex "target remote <IP>:<端口>"(如gdb -ex "target remote 192.168.1.100:2345")。qemu-user模拟环境,结合gdb-multiarch实现跨架构调试。gdb直接调试。-g选项,或优化级别过高(-O2可能导致变量优化)。ulimit -c为unlimited,且程序崩溃时未被信号处理器捕获。thread apply all bt full打印完整堆栈,结合watch监控锁变量。ssh -L 2345
2345 user@host)。GDB的强大功能源于其灵活的命令组合与扩展能力。建议开发者:
通过系统学习与实践,GDB将成为开发者解决复杂问题的得力助手,显著提升开发效率与代码质量。