温馨提示×

centos上c++怎么调试

小樊
52
2026-09-15 03:50:56
栏目: 编程语言

在 CentOS 上调试 C++ 程序,常见、成熟的方案如下(从最常用到进阶):


一、基本前提(必须)

1. 编译时加调试信息

g++ -g -O0 main.cpp -o main
  • -g:生成调试符号
  • -O0:关闭优化(否则变量可能被优化掉)

✅ 没有 -g,gdb 基本没法用


二、使用 GDB(最常用)

1. 安装 GDB

sudo yum install -y gdb

2. 启动调试

gdb ./main

3. 常用 GDB 命令

run                 # 运行程序
break main          # 在 main 函数下断点
break file.cpp:行号
next                # 单步(不进函数)
step                # 单步(进函数)
print x             # 打印变量
backtrace           # 查看调用栈
frame 0             # 切换栈帧
continue            # 继续执行
quit                # 退出

4. 调试崩溃(core dump)

开启 core 文件

ulimit -c unlimited

运行程序崩溃后:

gdb ./main core
bt

三、Segmentation fault 快速定位

gdb ./main
run
# 崩溃后
bt

四、日志调试(轻量级)

适合服务器程序:

#include <iostream>
std::cerr << "x = " << x << std::endl;

或 spdlog / glog


五、Valgrind(内存问题)

适合:

  • 内存泄漏
  • 越界访问
sudo yum install -y valgrind
valgrind ./main

六、IDE 调试(可选)

1. CLion(推荐)

  • 直接支持 CentOS 远程调试
  • 底层就是 gdb

2. VS Code

  • 安装 C/C++
  • 配置 launch.json
  • 使用 gdb

七、多线程调试

info threads
thread 2
bt

八、常见问题

1. 没有调试符号

file main
# 应该看到 "with debug_info"

2. CentOS 老版本 gdb 太旧

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

如果你愿意,可以告诉我:

  • CentOS 版本(6 / 7 / 8 / Stream)
  • 是服务器程序还是本地程序
  • 是否是多线程 / 崩溃 / 卡死

我可以给你更针对性的调试方案。

0 踩