如何在 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

相关推荐
王老师青少年编程10 分钟前
csp信奥赛C++标准模板库STL案例应用3
c++·算法·stl·csp·信奥赛·lower_bound·标准模版库
Tim_101 小时前
【C++入门】04、C++浮点型
开发语言·c++
hkNaruto1 小时前
【C++】记录一次C++程序编译缓慢原因分析——滥用stdafx.h公共头文件
开发语言·c++
柏木乃一2 小时前
进程(6)进程切换,Linux中的进程组织,Linux进程调度算法
linux·服务器·c++·算法·架构·操作系统
Trouvaille ~2 小时前
【Linux】从磁盘到文件系统:深入理解Ext2文件系统
linux·运维·网络·c++·磁盘·文件系统·inode
superman超哥3 小时前
仓颉锁竞争优化深度解析
c语言·开发语言·c++·python·仓颉
charlie1145141913 小时前
快速在WSL上开发一般的C++上位机程序
开发语言·c++·笔记·学习·环境配置·工程
夏幻灵3 小时前
C++ 中手动重载赋值运算符(operator=)时实现部分复制的思路和方法
开发语言·c++·算法
superman超哥4 小时前
仓颉语言中包与模块系统的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
x70x804 小时前
C++中不同容器的用法及接口(vector / deque / stack / queue / priority_queue)
开发语言·c++