Как отладить дочерний процесс Node.JS в коде Visual Studio?

Как отлаживать дочерний процесс Node.JS в VS Code?
Вот пример кода, который я пытаюсь отладить:

var spawn = require('child_process').spawn;
var scriptPath = './child-script.js';
var runner_ = spawn('node', [scriptPath]);

3 ответа

Решение

Вы можете легко добавить новую конфигурацию запуска в launch.json, которая позволяет подключаться к экземпляру работающего узла с определенным портом:

{
        "name": "Attach to Node",
        "type": "node",
        "address": "localhost",
        "port": 5870,
}

Просто убедитесь, что вы создаете / запускаете процесс вашего узла с аргументом --debug или --debug-brk.

В вашей конфигурации запуска добавьте "autoAttachChildProcesses": true как показано ниже

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "autoAttachChildProcesses": true,
  "program": "${workspaceFolder}/index.js"
}

Сделайте это Изменения в вашей Конфигурации, autoAttachChildProcess: true

Ищите этот модуль npm child-process-debug.

Я создал 2 отдельные конфигурации запуска в vscode:

Один для мастер-процесса, другой для дочернего процесса

   {
        "name": "Attach",
        "type": "node",
        "request": "attach",
        "port": 5858,
        "address": "localhost",
        "restart": false,
        "sourceMaps": false,
        "outFiles": [],
        "localRoot": "${workspaceRoot}",
        "remoteRoot": null
    },
    {
        "name": "Attach child",
        "type": "node",
        "request": "attach",
        "port": 5859,
        "address": "localhost",
        "restart": false,
        "sourceMaps": false,
        "outFiles": [],
        "localRoot": "${workspaceRoot}",
        "remoteRoot": null
    }

Рабочий процесс выглядит следующим образом:

  1. Начать процесс главного узла с --debug переключатель командной строки $ node --debug master.js
  2. Прикрепить к master.js процесс узла с использованием Attach через панель отладки
  3. Поместите точку останова в child.js процесс
  4. Быстро отсоединиться от main обрабатывать и прикреплять к child процесс с использованием Attach child

В целях отладки вы можете отложить отправку сообщений между процессами, используя setTimeout

// master.js
var child = child_process.fork(__dirname + './child.js')
setTimeout(function() {
    child.send('...')
}, 5000)

Просто добавьте это в файл конфигурации отладчика

{
  "type": "node",
  "request": "attach",
  "name": "Attach by Process ID",
  "processId": "${command:PickProcess}",
}

Чтобы прикрепить отладчик к идентификатору процесса. При запуске этой конфигурации будет предложен список процессов, в котором вы можете выбрать процесс, к которому вы хотите присоединить отладчик.

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