首页 > 后端开发 > C++ > 正文

C++如何使用GDB调试程序?(入门命令指南)

尼克
发布: 2025-12-15 17:40:03
原创
248人浏览过
GDB调试C++程序核心是三步:编译时加-g、启动GDB、用断点和单步控制执行;不加-g则无法查看变量或源码,必须用g++ -g或CMake设置Debug模式,再通过b/r/n/s/p/bt等命令调试。

c++如何使用gdb调试程序?(入门命令指南)

用GDB调试C++程序,核心是三步:编译时加-g、启动GDB、用断点和单步控制执行。不加调试信息,GDB几乎没法看变量或源码。

编译时必须带 -g 选项

GDB依赖调试符号,而默认编译(如 g++ main.cpp -o app)会剥离这些信息。正确做法是:

  • g++ -g -o app main.cpp —— 最基础,启用完整调试信息
  • g++ -g3 -O0 -o app main.cpp —— -g3 包含宏定义,-O0 关闭优化(避免代码重排导致单步跳变)
  • 如果用了 CMake,在 CMakeLists.txt 中设 set(CMAKE_BUILD_TYPE Debug),它会自动加 -g

常用 GDB 启动与运行命令

启动后先加载程序,再决定怎么跑:

  • gdb ./app —— 直接加载可执行文件
  • gdb ./app core —— 加载崩溃生成的 core 文件(需先 ulimit -c unlimited
  • runr —— 开始运行(支持传参:r arg1 "arg two"
  • kill —— 终止当前运行中的程序
  • quitq —— 退出 GDB

打断点、单步、查状态

这是日常调试最频繁的操作:

Visla
Visla

AI视频生成器,快速轻松地将您的想法转化为视觉上令人惊叹的视频。

Visla 100
查看详情 Visla

立即学习C++免费学习笔记(深入)”;

  • break mainb main —— 在 main 函数开头下断点
  • break file.cpp:15 —— 在指定文件第 15 行打断点
  • break ClassName::funcName —— 对 C++ 成员函数下断点(注意作用域
  • nextn —— 下一行(不进入函数内部)
  • steps —— 进入函数内部(遇到函数调用就跳进去)
  • print xp x —— 打印变量 x 的值(支持 p *ptrp vec[0] 等)
  • info registers —— 查寄存器(底层调试用);info threads —— 查线程

查看调用与崩溃现场

程序崩了?别急着重跑,先看它在哪挂的:

  • 崩溃后自动停在 fault 点,直接输 bt(backtrace)—— 显示完整调用栈
  • bt full —— 不仅显示函数,还打印每层的局部变量值
  • frame 2 —— 切换到栈帧 #2,再用 listp 查上下文
  • listl —— 显示当前行附近源码(可跟行号:l 20

基本上就这些。不用记全命令,先熟记 g 编译、b/r/n/s/p/bt 这几个,调试流程就通了。不复杂但容易忽略 -g。

以上就是C++如何使用GDB调试程序?(入门命令指南)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号