温馨提示×

怎么在CentOS调试C++程序

小樊
44
2026-08-18 22:46:59
栏目: 编程语言

CentOS 上调试 C++ 程序,通常流程是:编译带调试信息 → 使用 gdb / lldb / IDE 调试。下面按常见场景一步步说明。


一、准备环境

1. 安装编译器和调试工具

sudo yum install -y gcc gcc-c++ gdb make

CentOS 7/8 默认仓库即可,若使用 CentOS Stream 也可用 dnf

检查版本:

g++ --version
gdb --version

二、编译 C++ 程序(关键)

1. 示例代码

// main.cpp
#include <iostream>

int add(int a, int b) {
    int c = a + b;
    return c;
}

int main() {
    int x = 10;
    int y = 20;
    int z = add(x, y);
    std::cout << "z = " << z << std::endl;
    return 0;
}

2. 编译时加上调试信息(非常重要)

g++ -g -O0 -o main main.cpp

参数说明:

  • -g:生成调试信息(必须)
  • -O0:关闭优化(否则变量可能被优化掉)
  • -o main:输出可执行文件

三、使用 GDB 调试(最常用)

1. 启动调试

gdb ./main

进入 GDB 后常见操作:

命令 说明
run / r 运行程序
break main 在 main 函数打断点
break 文件名:行号 指定位置断点
next / n 单步执行(不进入函数)
step / s 单步执行(进入函数)
print 变量 / p x 查看变量
backtrace / bt 查看调用栈
continue / c 继续执行
quit 退出

示例流程

(gdb) break main
(gdb) run
(gdb) next
(gdb) print x
(gdb) step
(gdb) backtrace

四、调试崩溃程序(core dump)

1. 开启 core dump

ulimit -c unlimited

2. 运行程序,产生 core 文件

./main

产生类似:

core.12345

3. 使用 gdb 分析

gdb ./main core.12345

查看崩溃位置:

bt

五、使用 Visual Studio Code(推荐)

1. 安装 VS Code

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo yum install code

2. 安装插件

  • C/C++
  • GDB Debug

3. 配置 launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ Debug",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/main",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "externalConsole": false,
      "MIMode": "gdb"
    }
  ]
}

然后按 F5 调试。


六、常见问题

1. 看不到变量?

  • 忘记加 -g
  • 使用了 -O2 优化

✅ 正确:

g++ -g -O0 main.cpp

2. gdb 提示 “No symbol table”

说明没有调试信息,重新编译。


七、总结(最简流程)

sudo yum install gcc gcc-c++ gdb
g++ -g -O0 -o main main.cpp
gdb ./main

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

  • CentOS 版本(7 / 8 / Stream)
  • 命令行程序 / 后台服务 / 多线程 / 崩溃问题
  • 是否使用 CMake / Makefile

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

0