配置 vscode 的 tasks.json 和 launch.json
0. 介绍
tasks.json 是vscode的任务配置文件,官方文档链接。
常用参数(在编辑时使用快捷键 ctrl+space 可以快速查看参数):label
- 任务标签type
- 任务的类型。对于自定义任务,可以是 shell
或 process
。如果指定为 shell,则执行 shell 命令(例如:bash
、cmd
或 PowerShell
)。如果指定为 process,则执行该进程。command
- 要执行的实际命令group
- 定义 task 所属的组,可选build
、test
、none
presentation
- 定义如何在 UI 中输出处理任务runOptions
- 可设定打开某文件夹时自动运行任务dependsOn
- 定义依赖的另一个任务
launch.json是 vscode 的调试配置文件,官方文档链接。
常用参数:name
- 调试配置的名称type
- 调试器的类型。由调试扩展都引入,如 cmake、noderequest
- 调试器的请求类型。可选launch
启动或attach
附加program
- 调试器要调试的程序preLaunchTask
- 在调试前执行的 task,选择${defaultBuildTask}
会执行默认的构建任务。postDebugTask
- 在调试后执行的 taskserverReadyAction
- 调试程序向终端输出特定消息时,自动在浏览器中打开 URL,详情参阅
1. 以hexo为例
tasks.json
定义了生成和清理两个 hexo 任务。
1 |
|
launch.json
启动前执行hexo generate
生成任务,启动后自动打开页面,结束后执行hexo clean
清理任务。
1 |
|
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.c
和y.tab.c
,再执行gcc lex.yy.c y.tab.c -ll
生成可执行文件。
tasks.json
1 |
|
dependsOn
指定了依赖的任务,即在yacc run
执行前先执行yacc build
launch.json
1 |
|
preLaunchTask
指定了在调试前执行的任务,这里指定了yacc run
任务,先生成可执行文件再执行调试。"miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi"
可以去除在调试开始时,终端中多余的输出信息。