背景介绍:
对于很多开发者来说,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。