从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。解决办法

code128条形码的开始停止字符是啥

终止日期后终止应用程序(自杀代码Redux)

每次构建/运行时,VS Code 都会打开一个新的调试控制台

Firebase 函数预部署错误:命令以非零退出代码终止

如何修复颤振中的“终止原因:命名空间代码设计,代码 0x2”错误?