C++如何使用GDB进行调试?(常用命令教程)
发布时间 - 2026-01-09 00:00:00 点击率:次用GDB调试C++程序,核心是“编译带调试信息 + 启动GDB + 控制执行 + 查看状态”。只要掌握几个关键命令,就能快速定位变量值、函数调用和崩溃位置。
编译时必须加 -g 参数
没有调试信息,GDB只能看到汇编,看不到变量名和源码行。务必使用:
- g++ -g -o myapp main.cpp(基础调试版)
- g++ -g3 -O0 -o myapp main.cpp(推荐:-g3保留宏信息,-O0禁用优化,避免变量被优化掉或行号错乱)
如果用了 CMake,确保设置:set(CMAKE_BUILD_TYPE Debug) 或在命令行加 -DCMAKE_BUILD_TYPE=Debug。
启动与基本运行控制
启动后先加载程序,再决定如何跑:
立即学习“
C++免费学习笔记(深入)”;
- gdb ./myapp —— 启动GDB并载入可执行文件
- run 或 r —— 开始运行(可跟参数:r arg1 "arg two")
- kill —— 终止当前运行的程序
- quit 或 q —— 退出GDB
打断点、单步与继续执行
断点是调试的起点,灵活组合才能高效排查:
- break main —— 在 main 函数入口设断点
- break foo.cpp:25 —— 在 foo.cpp 第25行设断点
- break ClassName::methodName —— 对类成员函数设断点(注意命名空间或模板需完整写法)
- continue 或 c —— 从当前断点继续运行到下一个断点
- next 或 n —— 下一行(不进入函数内部)
- step 或 s —— 进入函数内部(遇到函数调用就跳进去)
- finish —— 执行完当前函数,停在它的返回处
查看变量、栈帧与内存
运行暂停后,重点就是“看”:
- print x 或 p x —— 打印变量 x 的值(支持表达式:p *ptr、p vec[0])
- print /x i —— 以十六进制打印 i;/t 是二进制,/f 是浮点
- info locals —— 显示当前栈帧所有局部变量
- bt 或 backtrace —— 查看完整调用栈(崩溃时第一要输的命令)
- frame 2 —— 切换到第2层栈帧,再用 info locals 看那里的变量
- x/4dw &i —— 查看 i 地址开始的4个有符号整数(x = examine,常用 x/10xb ptr 查内存字节)
实用技巧与避坑提醒
真实调试中这些细节常决定成败:
- 多线程程序加 set follow-fork-mode child,让 GDB 跟进子进程
- 段错误崩溃后,直接输 bt,90% 能看到空指针解引用或越界位置
- 变量显示为
?说明没加 -O0 或忘了 -g - 想看 STL 容器内容?安装 python 自定义脚本(如 libstdc++ pretty printers),否则 vector 只显示地址
- Ctrl+C 可随时中断正在运行的程序,停在当前执行点,方便检查状态
# python
# app
# 字节
# 栈
# ai
# c++
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器租用费用高吗?如何避免常见误区?
Windows Hello人脸识别突然无法使用
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何为不同团队 ID 动态生成多个“认领值班”按钮
如何解决hover在ie6中的兼容性问题
Laravel如何处理表单验证?(Requests代码示例)
Laravel如何记录自定义日志?(Log频道配置)
如何在云服务器上快速搭建个人网站?
Laravel如何配置任务调度?(Cron Job示例)
如何破解联通资金短缺导致的基站建设难题?
iOS验证手机号的正则表达式
微信小程序 require机制详解及实例代码
QQ浏览器网页版登录入口 个人中心在线进入
如何在建站之星绑定自定义域名?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
详解MySQL数据库的安装与密码配置
Laravel如何自定义错误页面(404, 500)?(代码示例)
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何快速查询网址的建站时间与历史轨迹?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Mybatis 中的insertOrUpdate操作
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel如何实现API资源集合?(Resource Collection教程)
PHP 500报错的快速解决方法
PHP正则匹配日期和时间(时间戳转换)的实例代码
Laravel如何实现用户注册和登录?(Auth脚手架指南)
如何快速生成专业多端适配建站电话?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
深圳网站制作的公司有哪些,dido官方网站?
企业网站制作这些问题要关注
怎样使用JSON进行数据交换_它有什么限制
原生JS实现图片轮播切换效果
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何在万网自助建站中设置域名及备案?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
详解Android图表 MPAndroidChart折线图

