如何在 VSCode 中高效开发和调试 C++ 程序:面向用过 Visual Studio 的小白

背景介绍:

对于很多开发者来说,Visual Studio(VS)是一个功能强大且易于使用的集成开发环境(IDE),尤其是对于 C++ 开发。但随着 VSCode 的崛起,越来越多的开发者开始尝试这个轻量级、插件丰富的编辑器。然而,对于习惯了 Visual Studio 的开发者来说,过渡到 VSCode 可能会遇到一些挑战,尤其是如何配置编译和调试环境。

VSCode 通过插件的形式扩展了功能,支持各种编程语言和工具,但它不像 Visual Studio 那样开箱即用。因此,对于习惯了 VS 的开发者,理解和配置 VSCode 可能会让人觉得有些繁琐。尤其是调试配置和编译任务的管理,可能需要一些额外的理解。

本文将结合一个 C++ 项目的实际目录结构,通过详细的分析 tasks.json、launch.json 和 settings.json 配置文件,帮助大家理解如何在 VSCode 中开发和调试 C++ 程序,并展示如何将这个配置扩展到多个 C++ 文件的开发中。

项目目录结构示例:

假设你有一个类似如下的 C++ 项目目录:

如上所示, C++ 项目包括了多个 .cpp 和 .h 文件。为了在 VSCode 中进行高效的编译和调试,我们需要配置 tasks.json 和 launch.json 文件。接下来,我们将详细解析这两个文件的内容。

1. 解析 tasks.json:

在 VSCode 中,tasks.json 文件负责定义编译、运行脚本等任务。它的核心作用是连接 VS Code 和您的命令行工具(如 g++ 编译器)。

以下是一个示例的 tasks.json 配置:

bash 复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "cppbuild",
      "label": "build test.c",
      "command": "g++",
      "args": [
        "-g",
        "-Wall",
        "-o",
        "${workspaceFolder}/build/test.exe",
        "${workspaceFolder}/test/test.c"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": "build",
      "detail": "compiler: g++ (MinGW)"
    }
  ]
}

解析:

  • type: cppbuild:表示这是一个 C++ 编译任务。

  • label: build test.c :任务的唯一名称,用于在 launch.json 中引用。

  • command: g++ :指定使用 g++ 编译器来编译代码。

  • args :传递给 g++ 编译器的参数:

    • -g:生成调试信息。指示编译器在可执行文件中嵌入调试符号 。没有它,无法设置断点。

    • -Wall:启用所有编译警告。

    • -o ${workspaceFolder}/build/test.exe:指定编译输出的文件路径。表示紧随其后的参数是编译后的输出文件名和路径。

    • ${workspaceFolder}/test/test.c:指定源文件路径。

  • problemMatcher: "$gcc":此配置表示 VSCode 将会根据 GCC 的输出,识别并显示编译错误和警告。

  • group: build:将任务分组为构建任务。

  • detail: compiler: g++ (MinGW) :显示更多关于任务的信息,这里表明使用 MinGW 的 g++ 编译器。

2. 解析 launch.json:

launch.json 文件定义了如何将编译好的程序运行起来 ,并配置调试器(如 GDB)来监控 这个运行中的程序,实现设置断点、查看变量等功能。下面是一个调试配置的示例:

bash 复制代码
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug test.c (gdb)",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/test.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "console": "integratedTerminal",
      "preLaunchTask": "build test.c",
      "MIMode": "gdb",
      "miDebuggerPath": "gdb.exe",
      "setupCommands": [
        {
          "description": "Enable pretty-printing",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

解析:

  • name: "Debug test.c (gdb)":表示调试配置的名称。

  • type: cppdbg:指定使用 C/C++ 调试器扩展。

  • request: launch:表示启动一个新的进程来运行程序(而非连接到一个已有的进程)。

  • program: "${workspaceFolder}/build/test.exe" :关键路径。要运行和调试的可执行文件 的完整路径。它必须与 tasks.json 的输出路径匹配 。

  • preLaunchTask: "build test.c" :关键链接 。在开始调试之前,先运行 tasks.json 中标签为 build test.c 的任务。这保证了在调试之前,代码总是最新的。

  • MIMode: "gdb" :指定使用 GDB(GNU 调试器)作为后台调试引擎。

  • miDebuggerPath: "gdb.exe":GDB 调试器程序本身的路径。

  • setupCommands:调试器设置命令,这里启用了 GDB 的 "漂亮打印" 功能,帮助调试时输出更易读。

3. 解析 settings.json:

settings.json 文件是 VSCode 中用来定义项目的配置文件。比如,可以设置 Python 环境的管理器、插件设置等。这里的内容如下:

bash 复制代码
{
  "python-envs.defaultEnvManager": "ms-python.python:conda",
  "python-envs.defaultPackageManager": "ms-python.python:conda",
  "python-envs.pythonProjects": []
}

解析:

  • 这部分配置和 Python 环境有关,并没有涉及到 C++ 的具体配置。通常,C++ 的配置更多会体现在 tasks.json 和 launch.json 中。

4. 扩展到多个 C++ 文件的配置:

在项目中,可能会有多个 C++ 源文件。比如:

  • test/main.cpp

  • test/CL_DLAlgFunc_YIWU_Onnx_HDS.cpp

  • test/CL_DLAlgFunc_YIWU_Onnx_Utils.cpp

  • test/CL_DLAlgFunc_YIWU_Onnx_HDS.h (头文件,不直接编译)

  • test/CL_DLAlgFunc_YIWU_Onnx_Utils.h (头文件,不直接编译)

如果希望编译和调试这些文件,可以按照以下方式扩展配置:

1. tasks.json 修改思路(新增 C++ 编译任务)

需要在 tasks.json 的 "tasks" 数组中添加一个新任务。

  • 新任务名称 (label): 例如 "build cpp project"。

  • 新输出路径: 将输出文件改为一个新名称,例如 ${workspaceFolder}\\build\\main.exe。

  • 新参数 (args): 将所有要编译的源文件都加到 args 中:

    bash 复制代码
    // 新任务的 args 部分应大致包含以下文件路径:
    "args": [
        "-g",
        "-Wall",
        "-o",
        "${workspaceFolder}\\build\\main.exe",
        "${workspaceFolder}\\test\\main.cpp",
        "${workspaceFolder}\\test\\CL_DLAlgFunc_YIWU_Onnx_HDS.cpp",
        "${workspaceFolder}\\test\\CL_DLAlgFunc_YIWU_Onnx_Utils.cpp"
    ]

2. launch.json 修改思路(新增 C++ 调试配置)

需要在 launch.json 的 "configurations" 数组中添加一个新配置。

  • 新配置名称 (name): 例如 "Debug C++ Project"。

  • 新程序路径 (program): 必须与新任务的输出路径匹配:

    bash 复制代码
    "program": "${workspaceFolder}\\build\\main.exe"
  • 预启动任务 (preLaunchTask): 必须与新任务的 label 匹配:

    bash 复制代码
    "preLaunchTask": "build cpp project"

总结:

通过创建新任务和新配置,就建立了一个新的工作流:

"Debug C++ Project" (在 launch.json 中) → 自动运行 "build cpp project" (在 tasks.json 中) → 使用 g++ 编译所有 .cpp 和 .c 文件 → 生成 main.exe → 启动 GDB 调试器运行 main.exe。

相关推荐
chenbingjie_c7 小时前
C++ 进阶核心知识点总结:模板、内存分区、new/delete、内存池
开发语言·c++
Frank_refuel9 小时前
【C++】Json库介绍和使用
c++
重生之小比特9 小时前
【C++进阶】map和set
java·开发语言·c++
VIP_CQCRE9 小时前
把 OpenCode 接入 Ace Data Cloud:让 VS Code、Cursor、Windsurf 统一调用 AI 编程模型
vscode·大模型·ai编程·opencode·acedatacloud
知识分享小能手10 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼10 小时前
linux 进程信号(上)
linux·c++·算法
海上小飞龙11 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Persistent的粽子!11 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
小小龙学IT12 小时前
三菱 PLC MC 协议(SLMP / QnA 兼容 3E 帧)深度解析:从帧结构到 C++/Go 双语言采集实战
c语言·c++·golang
程序猿编码12 小时前
C++/CUDA 手写 LLM 推理引擎:拆解 vLLM 核心 PagedAttention 与连续批处理
开发语言·c++·深度学习·神经网络·推理·vllm