Завершить другую задачу из 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, есть ли способ завершить задачу, указав имя (Watch Styles) в качестве параметра в tasks.json. Просмотр стилей – это непрерывно работающий процесс. Предложите другой способ завершения задачи после завершения отладки.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
4 672
3

Ответы 3

Это работает для меня:

{
   "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 в задаче. Некоторая минимальная информация здесь: с помощью команды в документе задачи.

Спасибо за ваш ответ. Какая у вас версия VS Code. Моя версия 1.29.1, я пытался добавить команды в раздел пост-отладки, мне не предлагалось завершить задачу. Я видел заявление в терминале. Я останавливаю задачу отладки с помощью Shift+F5 или использую значок «Стоп» для отладки > Executing task in folder my-app-folder: C:\Users\sandeep\Codebase\my-app-folder\${command:workbench.‌​action.tasks.termina‌​te} ${command:workbench.action.acceptSelectedQuickOpenItem}

Sandeep Kumar 04.02.2019 07:56

Я использую 1.30.2. Я провел некоторое исследование, и я помещу его в отдельный ответ.

Mark 05.02.2019 05:13

Когда я пытаюсь запустить эту задачу вручную, VS Code просто открывает терминал и регистрирует The terminal shell path "${command:workbench.action.tasks.terminate} ${command:workbench.action.acceptSelectedQuickOpenItem}" does not exist. Я использую VS Code версии 1.42.1.

knee-cola 20.02.2020 08:53

[Я добавлю еще один ответ, потому что новая дополнительная информация обширна.]

Кажется, есть проблема с запуском preLaunchTask и последующим запуском сеанса отладки. См., в частности, отладка не работает с первого раза. Похоже, что это исправлено в инсайдерской версии и может быть выпущено в начале февраля 2019 года. терминал не отправляет onLineData.

Тем временем есть предлагаемое исправление в одной из проблем, на которую я потерял ссылку, и это средство сопоставления проблем, которое будет сигнализировать отладчику о завершении зависимых задач.

В моей задаче просмотра я использовал это:

"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 года, и этот обходной путь не понадобится.

Спасибо, Марк, за то, что уделил мне время, мне нужно проверить мою задачу наблюдения, пытаясь определить шаблон, который можно поместить в ProblemMatcher. Я хотел бы, чтобы это было проще :). Вероятно, я бы дождался отдельного ответа, который вы предложили дать.

Sandeep Kumar 05.02.2019 10:51

Это был второй ответ. Это «может быть» исправлено уже 6 февраля 2019 года, когда может быть выпущено следующее обновление vscode.

Mark 05.02.2019 15:38

Это завершит все задачи после остановки отладки.

Или в данном случае просто build_runner watch...

запуск.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"
    }
  ]
}

задачи.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-переменные

Другие вопросы по теме