从postDebugTask-VS Code中终止另一个任务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从postDebugTask-VS Code中终止另一个任务相关的知识,希望对你有一定的参考价值。
我具有如下所示的调试启动配置(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
)作为参数来终止任务。监视样式是一个持续运行的过程,请建议在调试完成后是否还有其他方法可以终止任务。
这对我有用:
{
"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。
[[我将添加另一个答案,因为新的附加信息广泛。]
似乎运行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月的下一版本中修复,并且不需要此解决方法。
这将在调试停止后终止所有任务
以上是关于从postDebugTask-VS Code中终止另一个任务的主要内容,如果未能解决你的问题,请参考以下文章
vs code 问题:preLaunchTask“build”已终止,退出代码为 1。解决办法