GDB笔记

最近早手撕一个内存池,结果程序无法通过边界测试,找了许久也没找到问题,就学习了GDB进行调试,突然发现我之前过的是什么苦日子,早用上GDB我之前蓝桥杯不乱杀。特此记录一下。

编译

  • 添加-g,生成调试文件
  • 删除-O1/-O2/-O3,关闭编译器优化

一、程序启动与加载

命令 简写 用法 示例
gdb <可执行文件> - 加载调试程序 gdb a.out
run r 启动程序(可带参数) run arg1 arg2
set args - 设置程序启动参数 set args -b -x
attach <pid> - 附加到正在运行的进程 attach 1234
file <可执行文件> - 在GDB内加载程序 file a.out

二、断点管理

命令 简写 用法 示例
break <行号/函数名> b 设置断点 b mainb 101
break <文件:行号> b 指定文件断点 b test.c:20
break *<内存地址> b 内存地址断点 b *0x400448
break ... if <条件> b 条件断点 b 30 if i==5
info breakpoints i b 查看所有断点 -
delete <断点编号> d 删除断点 delete 2
disable/enable <断点编号> - 禁用/启用断点 disable 1
tbreak tb 设置临时断点(命中后自动删除) tbreak foo
watch <变量> - 监视变量变化 watch x

三、程序执行控制

命令 简写 用法 说明
continue c 继续运行至下一个断点 -
step s 单步进入(会跳入函数内部) -
next n 单步跳过(不进入函数) -
finish fin 执行完当前函数并暂停 -
until u 运行至当前循环外或指定行 until 50
return - 强制从当前函数返回 return 0(返回值)
kill - 终止正在调试的程序 -

四、数据查看与修改

命令 简写 用法 示例
print <表达式> p 打印变量/表达式值 p xp *ptr@10(数组)
display <变量> - 每次暂停自动显示变量值 display i
info locals i loc 查看当前栈帧局部变量 -
info args - 查看函数参数 -
x/<格式> <地址> - 检查内存内容 x/10xw 0x400000(16进制)
set var <变量>=<值> - 修改变量值 set var x=10
whatis <变量> - 查看变量类型 whatis ptr
ptype <类型> - 显示类型详细信息 ptype struct Node

五、调用栈与线程

命令 简写 用法 说明
backtrace bt 查看调用栈(函数调用链) -
frame <编号> f 切换栈帧 frame 2
info threads i th 查看所有线程 -
thread <线程ID> - 切换调试线程 thread 3
break <位置> thread <ID> b 为特定线程设断点 b main thread 1

六、其他

命令 简写 用法 说明
shell <shell命令> - 使用shell命令 shell ls
set logging on - 打开日志模式,记录输出 -

七、高级调试技巧

  1. 内存检查

    • watch -l *(int*)0x1234:监视内存地址变化
    • x/20b array:以字节形式查看数组内存(20个元素)
  2. 多线程死锁调试

    • info threads 查看线程状态,结合 bt 分析阻塞位置
  3. 动态库调试

    • 编译时添加 -g,GDB 自动加载符号表
  4. 信号处理

    • handle SIGSEGV stop print:捕获段错误信号并暂停
  5. 调试运行过程中的程序

    1
    2
    3
    gcc test.c -g   //编译
    ./test.out & //后台运行
    gdb -p 进程号

参考文档:

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2025 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信