详细介绍VS code C++ tasks.json和launch.json的设置

详细介绍VS code C++ tasks.json和launch.json的设置

在VS Code中使用C++进行开发时,您需要设置tasks.json和launch.json来启动和调试您的代码。这两个文件都是JSON格式的文件,您可以通过单击“查看”菜单中的“命令面板”并键入“tasks.json”或“launch.json”来打开它们。

tasks.json文件的设置:

tasks.json文件用于设置编译、构建和运行C++代码的任务。下面是一个简单的tasks.json文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args": [
"-g",
"-o",
"hello",
"hello.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

上述示例中,tasks.json文件定义了一个名为“build”的任务。该任务使用g++编译器编译名为“hello.cpp”的C++代码,并生成名为“hello”的可执行文件。该任务还将在命令行中启用调试信息(“-g”选项)。

在此示例中,我们可以看到以下关键属性:

  • “label”:任务的名称。
  • “type”:任务的类型,这里是“shell”。
  • “command”:要执行的命令,这里是“g++”编译器。
  • “args”:要传递给命令的参数,这里是编译选项和文件名。
  • “group”:任务所属的组,这里是构建任务组。
    您可以根据需要定义多个任务,并使用“group”属性将它们组织成不同的组,如“build”或“test”。

launch.json文件的设置:

launch.json文件用于设置调试器,以便您可以在VS Code中调试C++代码。下面是一个简单的launch.json文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/hello",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
}
]
}


在此示例中,launch.json文件定义了一个名为“Debug”的调试配置。该配置使用C++调试器(“cppdbg”)来启动名为“hello”的可执行文件,并在程序启动时停止执行(“stopAtEntry”)。该配置还指定了工作目录(“cwd”)和环境变量(“environment”)。

在此示例中,我们可以看到以下关键属性:

  • “name”:调试配置的名称。
  • “type”:调试器的类型,这里是C++调试器(“cppdbg”)。
  • “request”:启动请求类型,这里是“launch”。
  • “program”:要调试的程序的路径和名称。
  • “args”:传递给程序的参数。
  • “stopAtEntry”:设置为true时,调试器将在程序启动时停止执行。
  • “cwd”:程序的工作目录。
  • “environment”:环境变量的列表。
  • “externalConsole”:设置为true时,调试器将在外部命令行窗口中启动程序。

您可以根据需要定义多个调试配置,并根据需要设置它们的属性。例如,您可以为不同的编译选项定义不同的调试配置,或者为不同的目标平台定义不同的调试配置。

需要注意的是,tasks.json和launch.json文件中的属性可以根据您的需求进行修改。例如,您可以将编译器从g++改为clang++,或者将调试器从cppdbg改为lldb。确保在修改这些文件之前备份它们,以防不时之需。

除了上面提到的关键属性外,还有一些其他的属性可以在tasks.json和launch.json文件中进行设置。下面是一些示例:

在tasks.json中:

  • “problemMatcher”:定义了在编译和构建期间捕获错误和警告的正则表达式。

在launch.json中:

  • “preLaunchTask”:定义了在启动调试器之前要运行的任务。
  • “sourceFileMap”:定义了调试器中源文件和目标文件之间的映射关系。

以下是一个更完整的tasks.json和launch.json文件的示例,以便更好地了解如何设置和使用它们:
tasks.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args": [
"-g",
"-o",
"${workspaceFolder}/bin/hello",
"${workspaceFolder}/src/hello.cpp"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}


在这个示例中,我们定义了一个名为“build”的任务,它使用g++编译器编译名为“hello.cpp”的C++代码,并将可执行文件保存到“bin”目录中。同时,我们还设置了一个problemMatcher,以便VS Code可以捕获编译期间的错误和警告。

launch.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug (gcc)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/hello",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}


在这个示例中,我们定义了一个名为“Debug (gcc)”的调试配置,它使用g++编译器和gdb调试器来调试我们的程序。我们还启用了pretty-printing,以便在调试过程中更容易地查看变量的值。

以下是一个简单的C++工程示例,包括tasks.json和launch.json文件:

工程目录结构:

1
2
3
4
5
6
7
8
.
├── .vscode
│ ├── launch.json
│ └── tasks.json
├── build
└── src
└── hello.cpp

hello.cpp:

1
2
3
4
5
6
7
#include <iostream>

int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}

tasks.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args": [
"-g",
"-o",
"${workspaceFolder}/bin/hello",
"${workspaceFolder}/src/hello.cpp"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}

launch.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug (gcc)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/hello",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

在此示例中,我们的工程目录包括一个“bin”目录和一个“src”目录。我们的C++源代码文件“hello.cpp”位于“src”目录中,编译后的可执行文件将保存在“bin”目录中。

tasks.json文件定义了一个名为“build”的任务,它使用g++编译器编译名为“hello.cpp”的C++代码,并将可执行文件保存到“bin”目录中。该任务还将在命令行中启用调试信息(“-g”选项)。该任务的problemMatcher属性定义了正则表达式,用于捕获编译期间的错误和警告。

launch.json文件定义了一个名为“Debug (gcc)”的调试配置,它使用g++编译器和gdb调试器来调试我们的程序。我们的程序路径指向编译后的可执行文件“bin/hello”。此配置还启用了pretty-printing,以便在调试过程中更容易地查看变量的值。

注意:此示例假定您已经在系统上安装了g++编译器和gdb调试器。如果您使用的是其他编译器或调试器,或者您的开发环境有不同的配置,请相应地修改tasks.json和launch.json文件。

总之,以上示例提供了一个基本的C++工程结构和VS Code的tasks.json和launch.json文件设置示例。您可以根据自己的需求进行设置和修改,以便更好地适应您的开发环境和工作流程。


详细介绍VS code C++ tasks.json和launch.json的设置
https://qiangsun89.github.io/2023/04/25/详细介绍VS-code-C-tasks-json和launch-json的设置/
作者
Qiang Sun
发布于
2023年4月25日
许可协议