详细介绍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文件设置示例。您可以根据自己的需求进行设置和修改,以便更好地适应您的开发环境和工作流程。