在 Linux 下用 C++ 进行调试,常见且成熟的方案如下(从“最常用”到“进阶”):
g++ -g -O0 main.cpp -o main
-g:生成调试符号-O0:关闭优化(否则变量可能被优化掉,调试困难)gdb ./main
run # 运行程序
break main.cpp:10 # 在某一行打断点
break funcName # 在函数处打断点
next # 单步(不进入函数)
step # 单步(进入函数)
print x # 打印变量
backtrace # 查看调用栈
continue # 继续执行
quit # 退出
ulimit -c unlimited
./main
gdb ./main core
更适合新手:
sudo apt install cgdb
cgdb ./main
C/C++ 插件GDBtasks.json 编译:{
"label": "build",
"command": "g++",
"args": ["-g", "main.cpp", "-o", "main"]
}
launch.json 调试:{
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main",
"MIMode": "gdb"
}
✅ 支持:
lldb ./main
命令与 GDB 类似:
break set --file main.cpp --line 10
run
bt
info threads
thread 2
thread apply all bt
valgrind --leak-check=full ./main
g++ -g -fsanitize=address main.cpp -o main
./main
#include <iostream>
std::cerr << "x = " << x << std::endl;
或使用:
spdlogglog| 问题 | 原因 |
|---|---|
| 变量看不到 | 没加 -g 或开了 -O2 |
| 断点无效 | 编译优化 |
| 多线程卡死 | 死锁 |
| 段错误 | 空指针 / 越界 |
g++ -ggdb如果你愿意,可以告诉我:
我可以直接给你具体配置示例。