当然,以下是常用 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 调试技巧?