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


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

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

3 ответа:

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

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

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

Найдите этот модуль 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)

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

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