在 CentOS 上调试 C++ 程序,通常有以下几种常见方式和工具。下面从基础到进阶给你一个完整说明。
CentOS 默认可能没有 g++ 和 gdb:
sudo yum install -y gcc-c++ gdb
如果是 CentOS 8 / Stream:
sudo dnf install -y gcc-c++ gdb
验证:
g++ --version
gdb --version
一定要加 -g 选项,否则无法调试。
g++ -g -O0 main.cpp -o main
说明:
-g:生成调试信息-O0:关闭优化(否则变量可能被优化掉)gdb ./main
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main |
在 main 函数设断点 |
break test.cpp:20 |
在指定文件行号设断点 |
next / n |
单步执行(不进入函数) |
step / s |
单步进入函数 |
print x / p x |
打印变量 |
backtrace / bt |
查看调用栈 |
continue / c |
继续执行 |
quit / q |
退出 |
示例:
(gdb) break main
(gdb) run
(gdb) next
(gdb) print a
(gdb) backtrace
ulimit -c unlimited
运行程序崩溃后会生成 core 文件。
gdb ./main core
然后:
bt
可快速定位段错误位置。
类似 GDB,但带代码窗口:
sudo yum install -y cgdb
cgdb ./main
sudo yum install -y code
或手动下载 rpm 安装。
launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}"
}
]
}
支持:
sudo yum install -y valgrind
valgrind ./main
编译时:
g++ -g -fsanitize=address main.cpp -o main
./main
可检测:
✅ 确保:
-g-O2ulimit -c unlimited
如果你愿意,可以告诉我:
我可以给你更针对性的方案。