调试 Linux 上的 C++ 程序,常见方式从简单到专业如下。你可以按场景选择。
调试前一定要加 调试信息:
g++ -g -O0 -o test test.cpp
-g:生成调试信息(必须)-O0:关闭优化,避免变量被优化掉-Wall -Wextra:打开常见警告(推荐)gdb ./test
| 功能 | 命令 |
|---|---|
| 运行程序 | run / r |
| 设置断点 | break main |
| 行号断点 | break test.cpp:10 |
| 条件断点 | break 10 if i==5 |
| 单步执行 | next / n |
| 进入函数 | step / s |
| 查看变量 | print i |
| 查看堆栈 | backtrace / bt |
| 继续执行 | continue / c |
| 退出 | quit |
gdb ./test
run
bt
bt 可以看到崩溃调用栈,非常关键。
ps aux | grep test
gdb -p <pid>
退出时用:
detach
quit
info threads
thread 2
bt
常用:
sudo apt install valgrind
valgrind --leak-check=full ./test
适合:
strace ./test
适合:
#include <iostream>
#define DEBUG(x) std::cout << #x << " = " << x << std::endl
DEBUG(a);
DEBUG(vec.size());
或:
std::cerr << "[DEBUG] line " << __LINE__ << std::endl;
✅ 比 GDB 慢但直观
✅ 适合线上问题
安装插件:
配置 launch.json 即可图形化调试。
自带 GDB / LLDB,调试体验非常好。
-g -O0 编译❌ 没加 -g
❌ 开了 -O2 导致变量不可见
❌ 调试 release 程序
❌ 多线程乱用 print
如果你愿意,可以告诉我:
我可以给你针对性的调试方案。