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

用GDB调试C++程序,核心是三步:编译时加-g、启动GDB、用断点和单步控制执行。不加调试信息,GDB几乎没法看变量或源码。
GDB依赖调试符号,而默认编译(如 g++ main.cpp -o app)会剥离这些信息。正确做法是:
g++ -g -o app main.cpp —— 最基础,启用完整调试信息g++ -g3 -O0 -o app main.cpp —— -g3 包含宏定义,-O0 关闭优化(避免代码重排导致单步跳变)CMakeLists.txt 中设 set(CMAKE_BUILD_TYPE Debug),它会自动加 -g
启动后先加载程序,再决定怎么跑:
gdb ./app —— 直接加载可执行文件gdb ./app core —— 加载崩溃生成的 core 文件(需先 ulimit -c unlimited)run 或 r —— 开始运行(支持传参:r arg1 "arg two")kill —— 终止当前运行中的程序quit 或 q —— 退出 GDB这是日常调试最频繁的操作:
立即学习“C++免费学习笔记(深入)”;
break main 或 b main —— 在 main 函数开头下断点break file.cpp:15 —— 在指定文件第 15 行打断点break ClassName::funcName —— 对 C++ 成员函数下断点(注意作用域)next 或 n —— 下一行(不进入函数内部)step 或 s —— 进入函数内部(遇到函数调用就跳进去)print x 或 p x —— 打印变量 x 的值(支持 p *ptr、p vec[0] 等)info registers —— 查寄存器(底层调试用);info threads —— 查线程程序崩了?别急着重跑,先看它在哪挂的:
bt(backtrace)—— 显示完整调用栈bt full —— 不仅显示函数,还打印每层的局部变量值frame 2 —— 切换到栈帧 #2,再用 list 或 p 查上下文list 或 l —— 显示当前行附近源码(可跟行号:l 20)基本上就这些。不用记全命令,先熟记 g 编译、b/r/n/s/p/bt 这几个,调试流程就通了。不复杂但容易忽略 -g。
以上就是C++如何使用GDB调试程序?(入门命令指南)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号