新闻中心

C++ GDB如何调试?Linux下C++程序调试入门指南【GDB教程】

2025-12-14
浏览次数:
返回列表
GDB调试C++程序核心三步:编译加-g、启动GDB、设断点运行;关键在明确停靠位置、检查数据状态、控制执行流程。

c++ gdb如何调试?linux下c++程序调试入门指南【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 文件分析崩溃现场
  • runr —— 开始执行(可跟参数:r --input test.txt
  • kill —— 终止当前调试中的程序
  • quitq —— 退出 GDB

断点和单步:精准控制执行流

断点不是越多越好,关键是停在你想看的地方:函数入口、可疑逻辑前、对象构造/析构时。

Pippit AI Pippit AI

CapCut推出的AI创意内容生成工具

Pippit AI 133 查看详情 Pippit AI
  • break main —— 在 main 函数第一行设断点
  • break MyClass::doWork —— 断在类成员函数(支持重载,必要时加参数类型)
  • break file.cpp:25 —— 在指定文件第 25 行设断点
  • nextn)—— 下一行(不进入函数)
  • steps)—— 进入函数内部(遇到函数调用就跳进去)
  • finish —— 执行完当前函数,停在它的返回点

查看数据:变量、内存、调用栈

停住之后,重点是验证“程序状态是否符合预期”。

  • print var_namep var_name)—— 查变量值(支持 p *ptrp arr@10 打印数组前 10 个)
  • info locals —— 显示当前栈帧所有局部变量
  • bt(backtrace)—— 看函数调用链,崩溃时第一时间输它
  • frame 2 —— 切到第 2 层调用栈,再用 p 查那层的变量
  • x/4dw &i —— 以“4 个有符号十进制整数”格式查看变量 i 的内存(适合查越界、未初始化)

基本上就这些。不复杂但容易忽略的是:每次改代码后记得重新编译再 gdb;core 文件要开启 ulimit -c unlimited;C++ 模板、内联、RAII 会让调用栈看起来绕,多用 bt fullinfo 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养鱼网站入口 

搜索