配置 vscode 的 tasks.json 和 launch.json

0. 介绍

tasks.json 是vscode的任务配置文件,官方文档链接
常用参数(在编辑时使用快捷键 ctrl+space 可以快速查看参数):
label - 任务标签
type - 任务的类型。对于自定义任务,可以是 shellprocess。如果指定为 shell,则执行 shell 命令(例如:bashcmdPowerShell)。如果指定为 process,则执行该进程。
command - 要执行的实际命令
group - 定义 task 所属的组,可选buildtestnone
presentation - 定义如何在 UI 中输出处理任务
runOptions - 可设定打开某文件夹时自动运行任务
dependsOn - 定义依赖的另一个任务

launch.json是 vscode 的调试配置文件,官方文档链接
常用参数:
name - 调试配置的名称
type - 调试器的类型。由调试扩展都引入,如 cmake、node
request - 调试器的请求类型。可选launch启动或attach附加
program - 调试器要调试的程序
preLaunchTask - 在调试前执行的 task,选择${defaultBuildTask}会执行默认的构建任务。
postDebugTask - 在调试后执行的 task
serverReadyAction - 调试程序向终端输出特定消息时,自动在浏览器中打开 URL,详情参阅

1. 以hexo为例

tasks.json

定义了生成和清理两个 hexo 任务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"tasks": [
{
"label": "hexo generate",
"type": "shell",
"command": "hexo g",
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "hexo clean",
"type": "shell",
"command": "hexo clean",
"group": {
"kind": "build",
"isDefault": true
}
}
],
"version": "2.0.0"
}

launch.json

启动前执行hexo generate生成任务,启动后自动打开页面,结束后执行hexo clean清理任务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"version": "0.2.0",
"configurations": [
{
"name": "hexo s",
"command": "hexo s",
"request": "launch",
"preLaunchTask": "hexo generate",
"postDebugTask": "hexo clean",
//自动打开网页
"serverReadyAction": {
"action": "openExternally",
"pattern": "Hexo is running at",
"uriFormat": "http://localhost:4000"
},
"type": "node-terminal",
}
]
}

2. 以 GDB 为例(Linux下)

tasks.json

  • 默认的 gdb 生成任务:生成无扩展名的可执行文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {
    "type": "cppbuild",
    "label": "C/C++: gcc 生成活动文件",
    "command": "/usr/bin/gcc",
    "args": [
    "-fdiagnostics-color=always",
    "-g",
    "${file}",
    "-o",
    "${fileDirname}/${fileBasenameNoExtension}",
    ],
    "options": {
    "cwd": "${fileDirname}"
    },
    "problemMatcher": [
    "$gcc"
    ],
    "group": {
    "kind": "build",
    "isDefault": true
    },
    "detail": "调试器生成的任务。"
    }

launch.json

  • 默认的 gdb 调试启动
    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
    {
    "name": "(gdb) 启动",
    "type": "cppdbg",
    "request": "launch",
    "program": "${fileDirname}/${fileBasenameNoExtension}",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${fileDirname}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "gdb",
    "setupCommands": [
    {
    "description": "为 gdb 启用整齐打印",
    "text": "-enable-pretty-printing",
    "ignoreFailures": true
    },
    {
    "description": "将反汇编风格设置为 Intel",
    "text": "-gdb-set disassembly-flavor intel",
    "ignoreFailures": true
    }
    ],
    "preLaunchTask": "C/C++: gcc 生成活动文件"
    }

3. 以yacc为例

yacc 是一个语法分析器生成器,它需要先执行lex parser.l; yacc -d parser.y生成lex.yy.cy.tab.c,再执行gcc lex.yy.c y.tab.c -ll生成可执行文件。

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
37
38
39
{
"label": "yacc build",
"type": "shell",
"command" : "lex parser.l; yacc -d parser.y",
"options": {
"cwd": "${fileDirname}"
},
"group": {
"kind": "build",
"isDefault": true
},
},
{
"type": "cppbuild",
"label": "yacc run",
"command": "/usr/bin/gcc",
"args": [
// gcc lex.yy.c y.tab.c -ll
"-fdiagnostics-color=always",
"-g",
"${fileDirname}/lex.yy.c",
"${fileDirname}/y.tab.c",
"-o",
"${fileDirname}/yacc.out",
"-ll",
"--no-warnings"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn" : ["yacc build"],
}
  • dependsOn指定了依赖的任务,即在yacc run执行前先执行yacc build

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
26
{
"name": "yacc launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/yacc.out",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
},
],
"preLaunchTask": "yacc run"
}
  • preLaunchTask指定了在调试前执行的任务,这里指定了yacc run任务,先生成可执行文件再执行调试。
  • "miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi" 可以去除在调试开始时,终端中多余的输出信息。

配置 vscode 的 tasks.json 和 launch.json
https://heeteve-blog.pages.dev/2023/12/vscode配置tasks和launch/
作者
Heeteve
发布于
2023年12月1日
许可协议