温馨提示×

如何调试Ubuntu C++程序

小樊
46
2026-08-17 06:41:11
栏目: 编程语言

在 Ubuntu 上调试 C++ 程序,通常分为 编译阶段调试阶段。下面给你一套从入门到常用的完整流程,适合大多数开发场景。


一、准备环境

1. 安装编译器和调试器

sudo apt update
sudo apt install build-essential gdb
  • g++:C++ 编译器
  • gdb:GNU 调试器
  • build-essential:包含 gcc、g++、make 等

二、编译时开启调试信息(非常关键)

1. 示例代码 main.cpp

#include <iostream>

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

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

2. 编译时加 -g

g++ -g main.cpp -o main

必须加 -g,否则无法调试(看不到源码、变量名)


三、使用 GDB 调试(基础)

1. 启动 GDB

gdb ./main

2. 常用 GDB 命令

命令 作用
run / r 运行程序
break main 在 main 函数打断点
break main.cpp:8 在第 8 行打断点
next / n 单行执行(不进入函数)
step / s 进入函数
print x 打印变量 x
backtrace / bt 查看调用栈
continue / c 继续执行
quit 退出 GDB

示例流程

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

四、调试崩溃程序(Segmentation fault)

1. 运行程序

./main

如果崩溃:

Segmentation fault (core dumped)

2. 启用 core dump

ulimit -c unlimited

重新运行程序,会生成 core 文件。

3. 使用 GDB 分析

gdb ./main core

然后:

bt

✅ 可以快速定位崩溃位置


五、VS Code 调试(推荐)

1. 安装 VS Code

sudo snap install code --classic

2. 安装插件

  • C/C++(Microsoft)

3. 配置调试

  1. 打开项目
  2. Run and Debugcreate a launch.json
  3. 选择 C++ (GDB)

示例 launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ Debug",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/main",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

✅ 支持断点、变量查看、调用栈,非常方便


六、使用 CMake 项目调试

1. CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo)

set(CMAKE_BUILD_TYPE Debug)
add_executable(demo main.cpp)

2. 编译

mkdir build
cd build
cmake ..
make

然后:

gdb ./demo

七、常见调试技巧

✅ 打印调试(简单但有效)

std::cout << "x = " << x << std::endl;

✅ 条件断点

break main.cpp:10 if x == 10

✅ 查看内存

x/10xw &x

八、总结(推荐组合)

场景 推荐方式
学习 / 小项目 GDB
大型项目 VS Code + GDB
崩溃问题 core dump + GDB
CMake 项目 CMake + Debug 模式

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

  • 命令行程序 / 多线程 / 网络程序 / CMake 项目
  • 段错误、死循环、还是逻辑错误

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

0