当然,以下是常用 GDB(GNU 调试器) 的基本命令汇总,适用于 C/C++ 程序调试:
🧩 一、启动调试
命令 | 说明 |
---|
gdb ./your_program | 启动 gdb 并加载可执行文件 |
gdb ./your_program core | 加载 core dump 文件进行分析 |
gdb --args ./your_program arg1 arg2 | 带参数启动程序 |
🧭 二、运行控制命令
命令 | 说明 |
---|
run 或 r | 运行程序 |
run <args> | 运行时传参 |
continue 或 c | 继续运行程序 |
next 或 n | 单步执行(不进入函数) |
step 或 s | 单步执行(会进入函数) |
finish | 执行完当前函数后停下来 |
until | 跳出当前循环或执行到某行 |
return | 立即返回当前函数(可设返回值) |
kill | 终止程序 |
🧱 三、断点管理
命令 | 说明 |
---|
break <行号> | 在指定行设置断点 |
break <文件>:<行号> | 在某个文件行设断点 |
break <函数名> | 在函数入口设置断点 |
info breakpoints | 查看所有断点 |
delete <编号> | 删除指定断点 |
disable <编号> | 禁用断点(不删除) |
enable <编号> | 启用断点 |
clear | 清除当前位置的断点 |
🧐 四、查看程序状态
命令 | 说明 |
---|
print <变量名> | 打印变量值 |
p *ptr | 打印指针指向的内容 |
display <变量名> | 每次停下都自动打印变量值 |
info locals | 显示当前栈帧的所有局部变量 |
info args | 显示当前函数的参数 |
backtrace 或 bt | 打印调用栈 |
bt full | 打印完整调用栈(含变量) |
frame <编号> | 切换到某个栈帧 |
list 或 l | 显示当前执行位置附近的源码 |
list <函数名> | 查看函数源码 |
🔍 五、监控与观察
命令 | 说明 |
---|
watch <变量> | 变量变化时自动停下 |
rwatch <变量> | 读变量时停下 |
awatch <变量> | 读写变量都停下 |
info watchpoints | 查看所有监视点 |
🔧 六、线程调试
命令 | 说明 |
---|
info threads | 查看当前所有线程 |
thread <编号> | 切换到某个线程 |
thread apply all bt | 所有线程打印栈信息 |
🧰 七、其他有用命令
命令 | 说明 |
---|
set var <变量>=<值> | 修改变量值 |
info registers | 查看寄存器信息 |
disassemble | 反汇编当前函数 |
quit 或 q | 退出 gdb |
set pagination off | 关闭分页(防止输出暂停) |
💡 实用技巧
- 用
TAB
补全命令,比如 br<TAB>
自动补成 break
- 用
Ctrl + r
反向搜索历史命令 - 可以创建
.gdbinit
文件自定义命令
是否需要我根据你的项目场景(如调试死锁、内存问题、多线程等)给你定制一套 GDB 调试技巧?