Как отладить процесс узла, разветвленный изнутри службы Windows, используя VSCode

Я использую нод-окна с Node v10.0.0 создать службу Windows, которая запускает цель app.js в качестве службы Windows. На высоком уровне эта библиотека создает оболочку .exe файл, который регистрируется как служба Windows, которая затем порождает node как дочерний процесс с некоторыми параметрами командной строки. Однажды раковина .exe устанавливается как служба Windows, вы можете построить app.js как обычный node приложение и просто перезапустите службу Windows, чтобы отразить изменения. (Довольно круто!!)

Обычно командная строка ребенка node процесс выглядит так:

node --harmony <other node command line args, which are optional> app.js

Поскольку в этой командной строке нет флагов отладки, я решил использовать VSCode's Attach by ProcessID Функция и настройка конфигурации запуска отладки, как показано ниже:

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

Я также проверяю, что я запускаю VSCode от имени Администратора и, конечно же, когда я запускаю службу Windows и запускаю отладчик "Attach by Process ID", VSCode показывает мне средство выбора с перечисленным процессом узла.

Однако, когда я пытаюсь присоединиться к этому процессу узла, я получаю ошибку:

Attach to process: cannot enable debug mode for process'5744'(Error: Command failed:
node -e process._debugProcess(5744)
[eval]:1
process.debugProcess(5744)
    ^

Error: Access is denied
   at [eval]:1:9
   ....
   ....

Я пытался сделать это с node дочерний процесс порождался как отдельный процесс, но это не имело никакого значения. Я догадываюсь, что каким-то образом процесс Windows поддерживает своего рода блокировку node тем самым предотвращая взаимодействие любого другого процесса с ним.

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

node --harmony --inspect app.js

Тогда я могу сделать обычное подключение к порту 9229 (Порт отладки VSCode по умолчанию) и может пройти по коду, но app.js не удается, потому что служба Windows пытается запустить его несколько раз и время ожидания. Это особенность node-windows предотвратить постоянные повторные попытки, если app.js Вы пытаетесь выполнить хост, так как служба Windows имеет ошибки.

Обратите внимание, что нет ничего плохого в app.js и без --inspect Отметьте, что служба Windows работает нормально, и все функции app.js работают как положено. express сервис с одним корневым маршрутом получения, который отвечает "Hello World", если вы должны знать).

Кроме того, даже если я не пытался подключиться, служба Windows не запускается, если я использовал --inspect флаг в командной строке дочернего процесса.

Я вспоминаю из моих дней Visual Studio / C#, когда-то был параметр отладки, который фактически отключал бы все таймеры, когда пользователь находился в сеансе отладки, чтобы объяснить именно такую ​​проблему, но не уверен, будет ли это работать здесь, так как мы действительно пытаемся подключиться к node процесс, который не зависит от управляемого процесса Windows.

Поэтому я просто хотел поделиться с сообществом и посмотреть, могли ли другие успешно справиться с этой проблемой.

0 ответов

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