我具有如下所示的调试启动配置(launch.json
)。
{
"version": "0.2.0",
"configurations": [
{
"name": "Current TS File",
"type": "node",
"request": "launch",
"preLaunchTask": "Pre Debug Task",
"postDebugTask": "Stop Watch Styles",
"args": ["${relativeFile}"],
"runtimeArgs": ["--nolazy", "-r", "ts-node/register"],
"sourceMaps": true,
"cwd": "${workspaceRoot}",
"protocol": "inspector",
}
]
}
我的任务配置(tasks.json
)就像
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "next:copy",
"label": "Copy Files",
"problemMatcher": []
},
{
"type": "npm",
"script": "styles:tsw",
"label": "Watch Styles",
"problemMatcher": [],
},
{
"label": "Pre Debug Task",
"isBackground": true,
"dependsOn" :[
"Copy Files",
"Watch Styles"
]
},
{
"label": "Stop Watch Styles",
// No sure what should come here
}
]
}
试图在postDebugTask
中停止监视过程,有一种方法可以通过在task.json中提供名称(Watch Styles
)作为参数来终止Task。监视样式是一个持续运行的过程,请建议在调试完成后是否还有其他方法可以终止任务。
答案 0 :(得分:6)
这将在调试停止后终止所有任务
或者在这种情况下,只需build_runner watch
...
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Flutter",
"request": "launch",
"type": "dart",
"flutterMode": "debug",
"preLaunchTask": "flutter: build_runner watch",
"postDebugTask": "Terminate All Tasks"
}
]
}
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Terminate All Tasks",
"command": "echo ${input:terminate}",
"type": "shell",
"problemMatcher": []
}
],
"inputs": [
{
"id": "terminate",
"type": "command",
"command": "workbench.action.tasks.terminate",
"args": "terminateAll"
}
]
}
此处有更多信息:https://code.visualstudio.com/docs/editor/variables-reference#_command-variables
答案 1 :(得分:1)
这对我有用:
{
"label": "postdebugKill",
"type": "process",
"command":[
"${command:workbench.action.tasks.terminate}",
"${command:workbench.action.acceptSelectedQuickOpenItem}",
],
},
第一个"${command:workbench.action.tasks.terminate}"
将弹出一个面板,要求您选择要终止的任务。因此,如果您有多个正在运行的任务并且想要选择一个任务,则只能使用此命令。
第二个"${command:workbench.action.acceptSelectedQuickOpenItem}"
将终止上述面板中的所选任务。 (因此,您甚至都不会看到终止面板。)如果在调用postdebugKill
任务时只有一个正在运行的任务,则该任务将被自动选择并终止。否则,将首先终止列出的任务。同样,如果您有多个其他任务正在运行,并且想要选择要终止的任务,则不要包含第二个命令。
我不知道列出任何方法,也许通过args
选项列出了标签名称,如果该标签名称正在运行,则终止该任务。拥有此功能会很好。
[{postdebugKill
}的名称可以是您想要的任何名称。]
要调用调试后的任务,您的launch.json配置可能如下所示:
{
"type": "node",
"request": "launch",
"name": "Gulp: serve",
"program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js",
"args": [
"serve"
],
// "preLaunchTask": "someTask",
"postDebugTask": "postdebugKill"
},
在停止该"Gulp: serve"
调试会话后,将触发任务"postdebugKill"
。因此,如果我在启动"preLaunchTask"
调试会话之前使用"Gulp: serve"
启动任务或只是简单地启动了正在运行的任务-preLaunchTask
将被终止。
最近在vscode中添加了在任务中运行vscode命令的功能。这里的一些基本信息:using a command in a task doc。
答案 2 :(得分:1)
[由于新的附加信息广泛,我将添加另一个答案。]
运行preLaunchTask然后启动调试会话似乎存在问题。尤其参见debugging does not work on first try。它似乎是内部专家版中已修复的,可能会在2019年2月上旬发布。terminal not sending onLineData。
同时,在我丢失的链接之一的问题中,有一个建议的修复程序,即一个ProblemMatcher,它将向调试器发出信号,通知相关任务已完成。
在观看任务中,我使用了此
"problemMatcher": [
{
"base": "$tsc-watch",
"background": {
"activeOnStart": true,
"beginsPattern": "Using gulpfile ~\\OneDrive\\experimental\\gulpfile.js",
"endsPattern": "Starting 'watch'..."
}
}
],
之所以选择它,是因为当我手动启动gulp:watch任务时,我在终端机上得到了它:
[22:27:48] Using gulpfile ~\OneDrive\experimental\gulpfile.js
[22:27:48] Starting 'watch'...
[22:27:48] Starting 'watch'...
因此,您会看到我复制的开始和结束模式(带有额外的转义符)。
我建议您分别运行“调试前任务”,然后将开始和结束输出复制到“调试前任务” problemMatcher中,看看它是否现在可以工作。
我认为第一个答案中的代码是正确的,我只是没有像现在那样使用“ isBackground”和“ dependsOn”。但是我已经向我的"isBackground"
添加了problemMatcher
选项,并且它现在可以完美地工作了。
希望这将在2019年2月的下一版本中修复,并且不需要此解决方法。