0

0

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

穿越時空

穿越時空

发布时间:2025-12-14 20:01:02

|

885人浏览过

|

来源于php中文网

原创

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

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

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

Tellers AI
Tellers AI

Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

下载

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

  • 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 辅助判断。练几次,比读十页文档管用。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.09.27

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

118

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

256

2025.10.24

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2023.11.24

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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