在 CentOS 上调试 C++ 程序,常见、成熟的方案如下(从最常用到进阶):
g++ -g -O0 main.cpp -o main
-g:生成调试符号-O0:关闭优化(否则变量可能被优化掉)✅ 没有 -g,gdb 基本没法用
sudo yum install -y gdb
gdb ./main
run # 运行程序
break main # 在 main 函数下断点
break file.cpp:行号
next # 单步(不进函数)
step # 单步(进函数)
print x # 打印变量
backtrace # 查看调用栈
frame 0 # 切换栈帧
continue # 继续执行
quit # 退出
ulimit -c unlimited
运行程序崩溃后:
gdb ./main core
bt
gdb ./main
run
# 崩溃后
bt
适合服务器程序:
#include <iostream>
std::cerr << "x = " << x << std::endl;
或 spdlog / glog
适合:
sudo yum install -y valgrind
valgrind ./main
launch.jsoninfo threads
thread 2
bt
file main
# 应该看到 "with debug_info"
sudo yum install -y devtoolset-11
scl enable devtoolset-11 bash
#include <iostream>
int main() {
int a = 1;
int b = 0;
std::cout << a / b << std::endl; // 故意崩溃
}
g++ -g -O0 test.cpp -o test
gdb ./test
run
bt
如果你愿意,可以告诉我:
我可以给你更针对性的调试方案。