在 CentOS 下调试 C++ 程序,常见做法如下(从最基础到进阶):
没有 -g,基本没法调试
g++ -g -O0 main.cpp -o main
说明:
-g:生成调试信息-O0:关闭优化(否则变量可能被优化掉)gdb ./main
run # 运行程序
break main # 在 main 函数打断点
break test.cpp:20 # 在某一行打断点
next # 单步(不进函数)
step # 单步(进函数)
print x # 打印变量
backtrace # 查看调用栈
continue # 继续执行
quit # 退出
gdb ./main core
bt
(需要先开启 core dump)
ulimit -c unlimited
core 文件gdb ./main core
bt
编辑 /etc/security/limits.conf:
* soft core unlimited
* hard core unlimited
gdb ./main
run
# 崩溃后
bt
g++ -g -fsanitize=address main.cpp -o main
./main
能直接告诉你哪一行内存出错。
info threads
thread 2
bt
编译建议:
g++ -g -O0 -pthread main.cpp -o main
适合线上:
#include <iostream>
std::cerr << "x=" << x << std::endl;
或者用 spdlog、glog。
yum install cgdb
cgdb ./main
gdb 作为调试器yum install gdb
yum install gcc-c++
✅ 开发阶段
-g -O0✅ 线上问题
如果你愿意,可以告诉我:
我可以给你更具体的调试方案。