gdb 命令基本介绍gdbGNU Debugger是 GNU 项目的调试工具用于调试 C、C 等编译型语言的程序。它允许程序员在程序运行时检查变量、设置断点、跟踪执行流程、查看调用栈等是软件开发和调试的核心工具。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a语法gdb [OPTIONS] [EXECUTABLE] [CORE_FILE] gdb [OPTIONS] --pidPID启动选项基本选项-h, --help显示帮助信息-v, --version显示版本信息-q, --quiet静默模式启动-batch批处理模式执行命令后退出调试选项--pidPID附加到正在运行的进程-c, --coreFILE调试 core dump 文件-x, --commandFILE执行指定文件中的命令-d, --directoryDIR添加源文件搜索目录常用 GDB 命令运行控制run [args]启动程序可带命令行参数start在 main 函数处设置断点并启动continue继续执行到下一个断点next执行下一行不进入函数step执行下一行进入函数stepi执行一条机器指令finish执行到当前函数返回return [value]强制从当前函数返回kill终止正在调试的程序断点管理break location设置断点tbreak location设置临时断点只触发一次watch expr设置观察点表达式变化时停止rwatch expr当表达式被读取时停止awatch expr当表达式被读取或写入时停止info breakpoints查看所有断点delete [bpnum]删除断点disable [bpnum]禁用断点enable [bpnum]启用断点condition bpnum expr设置条件断点检查程序状态print expr打印表达式的值p/x expr十六进制打印p/d expr十进制打印p/s expr字符串打印display expr每次停止时自动显示表达式info locals显示当前函数的局部变量info args显示当前函数的参数info registers显示寄存器内容backtrace显示调用栈frame num切换到指定栈帧list显示源代码变量和内存set variable varvalue设置变量值x/nfu address检查内存whatis expr显示表达式类型ptype type显示类型定义线程调试info threads显示所有线程thread num切换到指定线程thread apply num cmd对指定线程执行命令break location thread num在指定线程设置断点其他命令help [cmd]显示帮助信息quit退出 GDBsource file执行文件中的命令set logging on开启日志记录使用示例1. 启动 GDBgdb ./myprogram gdb--pid1234gdb-ccore.1234 ./myprogram2. 设置断点并运行(gdb)breakmain(gdb)breakmyfunction(gdb)break42(gdb)run3. 执行和调试(gdb)next# 执行下一行(gdb)step# 单步执行进入函数(gdb)continue# 继续执行(gdb)finish# 执行到函数返回4. 检查变量和表达式(gdb)print x(gdb)print array[0](gdb)print *ptr(gdb)p/x value# 十六进制(gdb)p/s str# 字符串5. 设置观察点(gdb)watchx# 当 x 变化时停止(gdb)rwatch x# 当 x 被读取时停止(gdb)awatch x# 当 x 被读写时停止6. 查看调用栈(gdb)backtrace(gdb)bt# 简写(gdb)frame2(gdb)info locals(gdb)info args7. 调试多线程程序(gdb)info threads(gdb)thread3(gdb)thread apply all bt8. 批处理模式执行gdb-batch-xdebug_commands.txt ./myprogram条件断点示例设置条件断点(gdb)breakmyfunctionifx10(gdb)break42ifstrlen(buf)100设置命令列表(gdb)breakmyfunction(gdb)commands1Type commandsforbreakpoint1, one per line. End with a line saying justend.print xprint ycontinueend内存检查示例(gdb)x/10xw 0x12345678# 显示 10 个 32 位十六进制值(gdb)x/20xb buf# 显示 20 个字节十六进制(gdb)x/5s 0x12345678# 显示 5 个字符串实用技巧调试核心转储gdb-ccore.1234 ./myprogram(gdb)bt(gdb)info registers远程调试# 目标机器上启动 gdbservergdbserver :1234 ./myprogram# 本地机器上连接gdb ./myprogram(gdb)target remote target_ip:1234调试优化代码# 编译时保留调试信息gcc-g-O0-omyprogram myprogram.c# 或者使用 -Og优化但保留调试信息gcc-g-Og-omyprogram myprogram.c设置断点忽略次数(gdb)breakmyfunction(gdb)ignore110# 忽略前 10 次触发相关命令lldbLLVM 调试器strace跟踪系统调用ltrace跟踪库函数调用valgrind内存调试工具perf性能分析工具nm查看符号表objdump反汇编工具注意事项编译要求程序需要使用-g选项编译以包含调试信息权限要求调试其他用户的进程需要 root 权限性能影响调试会显著降低程序运行速度core dump需要设置足够的 core 文件大小限制远程调试需要在目标机器上安装 gdbserver优化代码优化编译-O可能导致调试信息不准确安装方法Debian/Ubuntuapt-get install gdbCentOS/RHELyum install gdb总结gdb是 GNU 项目提供的强大调试器支持设置断点、检查变量、跟踪执行流程、调试多线程程序等功能。它是 C/C 开发中不可或缺的工具掌握gdb的使用对于定位程序错误和理解程序行为至关重要。