新闻中心
C++ GDB如何调试?Linux下C++程序调试入门指南【GDB教程】
GDB调试C++程序核心三步:编译加-g、启动GDB、设断点运行;关键在明确停靠位置、检查数据状态、控制执行流程。

直接用 GDB 调试 C++ 程序,
核心就三步:编译带调试信息、启动 GDB、下断点跑起来。关键不是记命令,而是搞清“在哪停、怎么查、怎么走”。
编译时必须加 -g 参数
不加 -g,GDB 看不到变量、函数名、行号,等于盲调。哪怕用了 -O2 优化,也建议保留 -g(但注意:过度优化可能让源码和汇编错位,初学建议先用 -O0)。
- 正确写法: g++ -g -o myapp main.cpp utils.cpp
- 错误写法: g++ -o myapp main.cpp(GDB 启动后会提示 "No debugging symbols found")
- 如果用 CMake,确保 set(CMAKE_BUILD_TYPE Debug) 或手动加 -DCMAKE_CXX_FLAGS="-g"
常用 GDB 启动与运行命令
启动后别急着 run,先确认环境是否就绪。
- gdb ./myapp —— 加载程序(不运行)
- gdb ./myapp core —— 用 core 文件分析崩溃现场
- run 或 r —— 开始执行(可跟参数:r --input test.txt)
- kill —— 终止当前调试中的程序
- quit 或 q —— 退出 GDB
断点和单步:精准控制执行流
断点不是越多越好,关键是停在你想看的地方:函数入口、可疑逻辑前、对象构造/析构时。
Pippit AI
CapCut推出的AI创意内容生成工具
133
查看详情
- break main —— 在 main 函数第一行设断点
- break MyClass::doWork —— 断在类成员函数(支持重载,必要时加参数类型)
- break file.cpp:25 —— 在指定文件第 25 行设断点
- next(n)—— 下一行(不进入函数)
- step(s)—— 进入函数内部(遇到函数调用就跳进去)
- finish —— 执行完当前函数,停在它的返回点
查看数据:变量、内存、调用栈
停住之后,重点是验证“程序状态是否符合预期”。
- print var_name(p var_name)—— 查变量值(支持 p *ptr、p arr@10 打印数组前 10 个)
- info locals —— 显示当前栈帧所有局部变量
- bt(backtrace)—— 看函数调用链,崩溃时第一时间输它
- frame 2 —— 切到第 2 层调用栈,再用 p 查那层的变量
- x/4dw &i —— 以“4 个有符号十进制整数”格式查看变量 i 的内存(适合查越界、未初始化)
基本上就这些。不复杂但容易忽略的是:每次改代码后记得重新编译再 gdb;core 文件要开启 ulimit -c unlimited;C++ 模板、内联、RAII 会让调用栈看起来绕,多用 bt full 和 info registers 辅助判断。练几次,比读十页文档管用。
以上就是C++ GDB如何调试?Linux下C++程序调试入门指南【GDB教程】的详细内容,更多请关注其它相关文章!
# app
# 栈
# ai
# c++
# 如何使用
# linux
# 南京seo原创
# seo智能询盘系统
# 领英定制通网站建设
# 金融网站建设案例
# 北京免费seo网络推广方案
# 东坑网站建设优化
# 特克斯抖音seo公司
# 电疗仪推广营销怎么弄
# 湖南网站建设机构
# 单元学习seo原理
# 相关文章
# 几次
# 调试器
# 的是
# 三步
# 第三方
# 行号
# 停在
# 微软
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
LINUX怎么设置定时任务_LINUX crontab配置教程
小米Civi 4录制视频过暗_小米Civi 4亮度优化
微博网页版主页入口 微博官方网站免登录访问
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
Discord Slash 命令响应超时问题的异步解决方案
qq游戏网页版直接玩_qq游戏免下载快速入口
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
铁路12306官网网页端快速入口 铁路12306官方首页登录教程
jQuery Mask 插件中实现电话号码固定前导零的教程
UC浏览器网页版登录入口官网 电脑版网址入口
PDF文件体积过大处理_PDF压缩技巧详解
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
在React函数组件中利用原生HTML5进行邮箱地址验证
J*a TimerTask中HashMap意外清空的深层原因与解决方案
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
outlook中文官网入口地址 outlook官方中文版直达首页链接
poki免费入口快捷访问 poki人气小游戏直接玩站点
深入理解J*aScript中的B样条曲线与节点向量生成
快手极速版在线观看 官方网页版登录地址
Lar*el 递归关系中排除指定分支的教程
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
从OpenAI API响应中高效提取生成文本
BetterDiscord插件中安全更新用户简介的实践指南
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接
如何在 Windows 11 中启动游戏手柄设置
Animex动漫社网入口地址 Animex动漫社网正版在线入口
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
韩小圈电脑版在线入口_网页版免费登录地址
PHP URL参数传递与500错误调试指南
优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法
J*aScript中localStorage数据的获取、清洗与格式化教程
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
解决Tabulator日期时间排序问题的专业指南
Python实现多节点属性重叠度分析教程
J*aScript数据结构转换:将对象数组按类别分组
fishbowl官网免费版 fishbowl养鱼网站入口


2025-12-14
浏览次数:次
返回列表