跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

Ubuntu 下使用 VSCode 调试 C++ CMake 项目指南

Ubuntu 环境下配置 VSCode 调试 C++ CMake 项目的完整流程。涵盖环境准备(安装 build-essential、GDB、VSCode 插件)、CMakeLists.txt 配置(设置 Debug 模式及编译标志)、VSCode 调试配置文件 launch.json 和 tasks.json 的编写、断点调试操作及常见问题解决方案。确保生成调试符号并正确设置可执行文件路径与环境变量。

RedisGeek发布于 2026/2/25更新于 2026/9/468 浏览

1. 环境准备

确保您的系统已安装必要的编译工具链、调试器和 VSCode 插件。

组件类别具体项目安装/配置说明
系统工具编译工具链 (build-essential)终端执行:sudo apt update && sudo apt install build-essential gdb cmake
调试器 (GDB)通常已包含在 build-essential 中,也可单独安装
VSCode 插件C/C++ (Microsoft)提供代码智能感知、调试支持
CMake 与 CMake Tools增强对 CMake 项目的支持(非必需但推荐)

2. 项目配置(CMakeLists.txt)

在项目的 CMakeLists.txt 中,必须设置 Debug 构建类型以生成包含调试信息的可执行文件。这是能够进行断点调试的基础

cmake_minimum_required(VERSION 3.10) project(MyProject)
# 关键配置:设置为 Debug 模式
set(CMAKE_BUILD_TYPE Debug)
# 生成调试符号
# 可选:进一步指定编译标志
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
# -O0 优化级别便于调试,-g 生成调试信息
add_executable(${PROJECT_NAME} main.cpp)

使用标准的 CMake 流程构建项目:

mkdir -p build
cd build
cmake ..
make -j4

3. 配置 VSCode 调试环境

VSCode 主要通过当前项目根目录下 .vscode 文件夹中的 launch.json 和 tasks.json 文件来控制调试行为。

3.1 创建调试配置文件
  1. 在 VSCode 中打开项目文件夹。
  2. 切换到'运行和调试'视图 (Ctrl+Shift+D)。
  3. 点击'创建 launch.json 文件',选择 C++ (GDB/LLDB)。
  4. 这将自动生成 .vscode/launch.json 文件。根据需要,可能还会自动生成或需要手动创建 tasks.json 文件
3.2 关键配置详解

下面表格列出了 launch.json 和 tasks.json 中最关键的配置项及其作用。

配置文件配置项说明与示例
launch.json"program"【最关键】 指定要调试的可执行文件的绝对路径。例如:${workspaceFolder}/build/MyProject
"preLaunchTask"指定在调试开始前自动执行的任务的 label,通常用于编译项目。例如:"cmake-build"
"args"传递给程序的命令行参数,以 JSON 数组格式书写。例如:["-arg1", "value1"]
"cwd"程序启动时的工作目录。例如:${workspaceFolder} 或 ${workspaceFolder}/bin
"environment"设置程序运行时的环境变量,对于指定库路径(LD_LIBRARY_PATH)非常有用
"MIMode"指定调试器类型,在 Linux 上通常是 "gdb"
tasks.json"label"任务的唯一标识符,必须与 launch.json 中的 preLaunchTask 值一致
"command", "args"定义具体执行的编译命令和参数。例如,使用 cmake 和 make

一个集成了自动化构建任务的 launch.json 配置示例如下:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(gdb) Launch - MyProject",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/MyProject",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [{"name": "LD_LIBRARY_PATH", "value": "/your/lib/path"}],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "为 gdb 启用整齐打印",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "cmake-build"
    }
  ]
}

对应的 tasks.json 文件示例,用于定义调试前的编译任务:

{
  "version": "2.0.0",
  "options": {
    "cwd": "${workspaceFolder}/build"
  },
  "tasks": [
    {
      "label": "cmake-build",
      "type": "shell",
      "command": "bash",
      "args": ["-c", "cmake -DCMAKE_BUILD_TYPE=Debug .. && make -j4"],
      "group": "build",
      "presentation": {
        "echo": true,
        "reveal": "always"
      }
    }
  ]
}

4. 开始调试

  1. 设置断点:在代码编辑器的行号左侧点击,设置断点(红色圆点)。
  2. 启动调试:按 F5 键。如果配置了 preLaunchTask,VSCode 会先自动编译项目,然后程序运行并在断点处暂停。
  3. 调试控制:
    1. F10 (单步跳过):执行当前行,不进入函数内部。
    2. F11 (单步执行):执行当前行,如该行是函数调用,则进入函数内部。
    3. Shift+F11 (单步跳出):执行完当前函数剩余代码,返回到调用处。
    4. F5 (继续):从当前断点运行至下一个断点。
    5. Shift+F5 (停止调试)。
    6. 在 VARIABLES(变量) 窗口查看或 Watch(监视) 窗口添加表达式来监视变量值

5. 常见问题与解决方案

问题现象可能原因与解决方案
调试时提示'无法找到可执行文件'launch.json 中的 program 路径错误。检查可执行文件是否在指定路径,文件名是否正确
断点不被命中(显示灰色)程序未包含调试信息。确保 CMake 以 Debug 模式编译(-DCMAKE_BUILD_TYPE=Debug)
程序启动后立即退出,退出代码为 127通常表示缺少动态链接库。确保 LD_LIBRARY_PATH 环境变量在 launch.json 的 environment 字段中正确设置,或者使用 ldd 命令检查可执行文件的依赖库
'preLaunchTask 未找到'错误tasks.json 中任务的 label 与 launch.json 中的 preLaunchTask 名称不匹配。确保两者完全一致

6. 补充技巧

使用 CMake Tools 扩展:安装 CMake Tools 扩展后,它可以简化 CMake 项目的配置、构建和调试目标选择过程,有时可以避免手动编写 tasks.json

直接使用 GDB 命令行调试:对于快速验证或复杂问题,可以直接在终端中使用 GDB。使用 -g 选项编译程序后,通过命令 gdb /path/to/your/program 启动调试。常用命令有 break(设断点)、run(运行)、next、step、print(打印变量)、backtrace(查看调用栈)和 quit(退出)

目录

  1. 1. 环境准备
  2. 2. 项目配置(CMakeLists.txt)
  3. 关键配置:设置为 Debug 模式
  4. 生成调试符号
  5. 可选:进一步指定编译标志
  6. -O0 优化级别便于调试,-g 生成调试信息
  7. 3. 配置 VSCode 调试环境
  8. 3.1 创建调试配置文件
  9. 3.2 关键配置详解
  10. 4. 开始调试
  11. 5. 常见问题与解决方案
  12. 6. 补充技巧

更多推荐文章

查看全部
  • Linux 进程核心原理精讲:从体系结构到实战操作
  • Codex 上手指南:从 CLI 配置到 MCP 工具集成
  • Python 多线程核心解析:原理、实现与线程安全
  • 前端开发基础:HTML/CSS/JavaScript 核心与开发环境入门
  • Spring Boot 集成 ECharts 实现数据可视化实战
  • Ubuntu 25.04 安装 Docker 与 Portainer 教程
  • Linux 生产者 - 消费者模型与条件变量详解
  • C++ 静态成员与非静态成员详解
  • AI 产品架构设计:从 0 到 1 搭建信息架构与核心流程
  • KingbaseES SQL 防火墙技术解析与实战
  • 单链表常见算法题解析:反转、合并与环检测
  • 华为 OD 机试:停车场收入统计
  • AI 产品经理实战进阶指南:核心技能与职业转型路径
  • Git 团队开发全流程实战指南
  • LazyLLM 低代码框架实战:代码专家智能体开发
  • 使用 AI 工具快速生成专业架构图的几种方法
  • AIGC 去 AI 味 Prompt 设计:从原理到实践解析
  • Kimi-K2.5 视觉驱动编程:原生多模态架构解析与实践
  • 把 GitHub Copilot 在 VS Code 里用顺手:中文环境下的调校与实战配置
  • Linux 下 Java JAR 包后台运行与端口检查实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online