在Linux上调试C++,工具箱里其实有不少选择。最常见的几种方法,下面挨个过一遍。

GDB(GNU Debugger)——这是Linux下最古老也最硬核的调试器,没有之一。它能做的事情很纯粹:启动程序、设置断点、单步执行、查看变量、分析调用栈。基本流程是这样的:
- 编译时加
-g选项,生成调试信息:
g++ -g -o myprogram myprogram.cpp - 启动GDB加载程序:
gdb myprogram - 在GDB提示符下,用这些命令控制程序:
break main(在main设断点)、run(运行)、next(单步不进入函数)、step(单步进入函数)、continue(继续到下一个断点)、print variable_name(打印变量)、backtrace(显示调用栈)。 - 调试完输入
quit退出。
LLDB——LLVM家族出品的调试器,功能跟GDB不相上下,尤其适合搭配Clang编译器使用。如果你在用Clang,LLDB是原生搭档。
Visual Studio Code——现在很多开发者喜欢用这个编辑器,通过安装C/C++扩展就能获得调试能力。背后实际调用的还是GDB或LLDB,但界面操作更友好,断点、变量监视、调用栈都可视化。
CLion——JetBrains家的商业IDE,C++开发体验非常完整,内置的调试器同样基于GDB和LLDB,但集成了更智能的断点、条件断点、内存视图等功能。适合团队开发或项目较大时使用。
Valgrind——严格来说它不算传统调试器,而是内存调试和分析工具。用来检测内存泄漏、非法内存访问这类问题非常高效。调试时经常跟GDB配合使用:先用Valgrind跑一遍,定位到可疑代码,再用GDB深入排查。
AddressSanitizer——一个编译器内置的快速内存错误检测器,通过添加编译选项开启(比如 -fsanitize=address)。它能在运行时捕获缓冲区溢出、使用未初始化内存等问题,速度比Valgrind快很多,适合在开发阶段常开。
总结一下:GDB是最基础也最通用的,建议优先掌握。其他工具各有侧重,比如VS Code和CLion提供更友好的交互界面,Valgrind和AddressSanitizer专攻内存问题。根据场景灵活搭配,调试效率会高很多。