在 CentOS 上调试 C++ 代码,通常分为编译阶段和运行/调试阶段。下面给你一套比较完整、常用的做法。
sudo yum install -y gcc gcc-c++ gdb make
如果是 CentOS 8 / Stream:
sudo dnf install -y gcc gcc-c++ gdb make
检查版本:
g++ --version
gdb --version
test.cpp
#include <iostream>
using namespace std;
int add(int a, int b) {
int c = a + b;
return c;
}
int main() {
int x = 10;
int y = 20;
int z = add(x, y);
cout << z << endl;
return 0;
}
-g)g++ -g -O0 test.cpp -o test
说明:
-g:生成调试信息(非常重要)-O0:关闭优化,方便调试-o test:指定可执行文件名gdb ./test
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main |
在 main 函数下断点 |
break test.cpp:10 |
在指定行下断点 |
next / n |
单步执行(不进函数) |
step / s |
单步执行(进入函数) |
print x / p x |
打印变量 |
backtrace / bt |
查看调用栈 |
continue / c |
继续执行 |
quit / q |
退出 GDB |
示例:
break main
run
next
print x
step
backtrace
./test
如果崩溃:
Segmentation fault (core dumped)
ulimit -c unlimited
重新运行程序生成 core 文件:
./test
ls core*
gdb ./test core
然后:
bt
即可看到崩溃位置。
如果不方便用 GDB:
#include <iostream>
#define DEBUG(x) cout << #x << " = " << x << endl;
int main() {
int a = 5;
DEBUG(a);
}
sudo yum install -y code
launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/test",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}"
}
]
}
✅ 确认编译时加了 -g
✅ 使用 -O0
sudo yum install -y devtoolset-9
scl enable devtoolset-9 bash
如果你愿意,可以告诉我:
我可以给你更针对性的方案。