在 CentOS 上调试 C++ 项目,通常分为 编译调试版本 → 使用调试器 → 常见工具辅助 几个步骤。下面给你一个实战向的完整指南。
sudo yum groupinstall "Development Tools"
或者最小安装:
sudo yum install gcc gcc-c++ gdb make cmake
sudo yum install gdb
查看版本:
gdb --version
-gg++ -g -O0 main.cpp -o main
说明:
-g:生成调试信息-O0:关闭优化(非常重要,否则变量会被优化掉)gdb ./main
进入 GDB 后:
(gdb) run
| 功能 | 命令 |
|---|---|
| 设置断点 | break main.cpp:10 |
| 运行 | run |
| 单步(不进函数) | next |
| 单步(进函数) | step |
| 查看变量 | print var |
| 查看调用栈 | backtrace |
| 切换栈帧 | frame 1 |
| 继续执行 | continue |
| 退出 | quit |
示例:
break main
run
next
print a
backtrace
gdb ./main
run
崩溃后:
backtrace
可以看到崩溃位置。
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
gdb ./your_binary
sudo yum install valgrind
valgrind ./main
查内存泄漏:
valgrind --leak-check=full ./main
sudo yum install strace
strace ./main
gcore <pid>
gdb ./main core.xxx
原因:编译时没加 -g
✅ 解决:重新编译
<optimized out>原因:开了 -O2
✅ 解决:用 -O0
可能是 SELinux:
sudo setenforce 0
g++ -g -O0gdb ./programbreak + runprint / backtracevalgrind如果你有 具体项目结构(Makefile / CMake) 或 报错信息,可以直接贴出来,我可以帮你一步步调。