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

背景介绍:

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

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

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

项目目录结构示例:

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

如上所示, C++ 项目包括了多个 .cpp.h 文件。为了在 VSCode 中进行高效的编译和调试,我们需要配置 tasks.jsonlaunch.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.jsonlaunch.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

相关推荐
暗然而日章42 分钟前
C++基础:Stanford CS106L学习笔记 5 内存与指针
c++·笔记·学习
学习路上_write42 分钟前
FREERTOS_定时器——创建和基本使用
c语言·开发语言·c++·stm32·嵌入式硬件
liu****1 小时前
10.指针详解(六)
c语言·开发语言·数据结构·c++·算法
HECUgauss1 小时前
VScode 使用中遇到的问题
ide·vscode·编辑器
报错小能手1 小时前
C++流类库 标准输入流的安全性与成员函数 ostream 成员函数与自定义类型的IO
开发语言·c++·cocoa
进击的荆棘1 小时前
C++起始之路——基础知识
开发语言·c++
郝学胜-神的一滴1 小时前
OpenGL错误检查与封装:构建健壮的图形渲染系统
开发语言·c++·程序人生·软件工程·图形渲染
繁华似锦respect1 小时前
C++ 设计模式之代理模式详细介绍
linux·开发语言·c++·windows·设计模式·代理模式·visual studio
xlq223229 小时前
22.多态(上)
开发语言·c++·算法