Завершить другую задачу из поста DebugTask - VS Code - PullRequest
0 голосов
/ 01 февраля 2019

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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

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

Кажется, есть проблема с запуском 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'...

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

Я предлагаю вам отдельно запустить «Предварительную задачу отладки» и скопировать начальный и конечный вывод в свою задачу «Предварительная задача отладки» и посмотреть, работает ли она сейчас.

Мой код в первом ответе, который я считаю правильнымЯ просто не использовал isBackground и зависимость от вас, как вы.Но я добавил "isBackground" к моему и problemMatcher вариант, и теперь он работает безупречно.

Надеюсь, это будет исправлено в следующем выпуске февраля 2019 года, и в этом обходе не будет необходимости.

0 голосов
/ 01 февраля 2019

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

{
   "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 name может быть любым, каким вы хотите.]

Чтобы вызвать задачу postdebug, ваша конфигурация 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.Некоторая минимальная информация здесь: с помощью команды в задании doc .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...