在 Linux 下调试 C++ 程序,常见且推荐的方案是 GDB + GCC/Clang + 调试信息。下面从环境准备 → 编译 → 调试 → 常用技巧一步步说明。
# Ubuntu / Debian
sudo apt update
sudo apt install build-essential gdb
# CentOS / Rocky / Alma
sudo yum groupinstall "Development Tools"
sudo yum install gdb
检查:
g++ --version
gdb --version
-gg++ -g main.cpp -o main
g++ -g -O0 main.cpp -o main
-O0:关闭优化,避免变量被优化掉、代码乱序
g++ main.cpp -o main # 无调试信息,GDB 几乎不可用
gdb ./main
或:
gdb --args ./main arg1 arg2
run
run arg1 arg2
break main # 函数断点
break main.cpp:10 # 行号断点
break MyClass::foo # C++ 类成员函数
list
list main.cpp:10
next # 下一步(不进入函数)
step # 进入函数
print x
print obj.member
backtrace
bt
continue
delete 1
./main
gdb ./main
run
崩溃后:
bt
你可以看到崩溃位置 + 调用栈。
info threads
thread 2
thread apply all bt
g++ -g -fsanitize=address main.cpp -o main
./main
✅ 能直接定位:
g++ -g main.cpp -o main
launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"externalConsole": false,
"MIMode": "gdb"
}
]
}
然后 F5 调试 ✅
| 问题 | 原因 |
|---|---|
变量显示 <optimized out> |
没加 -O0 |
| 断点打不上 | 没有 -g |
| 看不到源码 | 编译路径变了 |
| STL 容器看不懂 | 正常,GDB 对 STL 支持有限 |
✅ 日常开发
GCC + GDB + VS Code
✅ 内存问题
-fsanitize=address
✅ 复杂项目
CMake + Debug build
如果你愿意,可以告诉我:
我可以直接给你针对你项目的调试配置。