Как отлаживать JavaScript в nodejs в Windows, когда я не вызываю node.exe

Я пытаюсь отладить скрипт nodejs (в Windows). Я обнаружил, что могу остановить выполнение / установить точку останова в сценарии с помощью "отладчика"; заявление. Однако, похоже, это работает, только если node.exe называется:

node debug myscript.js

Проблема в том, что я не тот, кто вызывает node.exe, поэтому я не могу передать аргумент отладки. На самом деле node.exe вызывается много раз до myscript.js. И myscript.js в свою очередь вызывается из какого-то другого.js. Запуск myscript.js напрямую (за пределами other.js) не работает.

Есть ли способ подождать, пока отладчик подключится?

Если возможно, решение должно использовать отладчик GUI (например, npm node-inspector).

Обновление 1:

Чтобы дождаться отладчика в вашем приложении, используйте:

npm install sleep           # install locally, not global

Добавьте код в myscript.js:

var sleep = require('sleep'); 

...
   var done = 1;
   while ( done != 1 ) {
     console.log("PID=" + process.pid);
     sleep(1);
   }
...

Запустите ваш скрипт (т.е. запустите все, что запускает его выполнение):

PID=3280
PID=3280

Запустить узел-инспектор:

C:\Users\Samo>node-inspector
Node Inspector v0.12.7
Visit http://127.0.0.1:8080/?port=5858 to start debugging.

Откройте новый cmd.exe и запустите:

C:\Users\Samo>tasklist /FI "IMAGENAME eq node.exe"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
node.exe                      3944 Console                    1     64,016 K
node.exe                      3280 Console                    1    119,276 K

Из той же проблемы cmd.exe:

node -e "process._debugProcess(3280)"

В выводе отлаженного скрипта вы должны увидеть:

PID=3280
Starting debugger agent.
Debugger listening on port 5858

Теперь перейдите по указанному URL ( http://127.0.0.1:8080/?port=5858), используя Chrome (не Firefox, а Chrome). Вы должны быть в состоянии отладить, сейчас.

Я сказал должен, потому что в моем случае это не работает. Если я отправлю _debugProcess на 3280 (мой myscript.js), ничего не произойдет. Однако если я отправлю _debugProcess на номер 3944, я получу "Запуск агента отладчика". сообщение. Зачем?

0 ответов

Если у вас есть типичное рабочее пространство Windows, такое как Node, git и VSCode,
вы можете сделать это, выполнив следующие простые шаги:

  1. В VSCode откройте launch.jsonконфигурации или создайте новую, щелкнув колесико
    (это вид отладки CtrlShiftD)

  1. По умолчанию узел будет прослушивать порт 9229, поэтому добавьте эту конфигурацию:
{
  "type": "node",
  "request": "attach",
  "name": "Attach to 9229",
  "port": 9229
},
  1. Откройте диспетчер задач и найдите PID вашего процесса узла, который
    я мог бы идентифицировать по"build" папка, в которой index.js является.
  2. открыть другой cmd или git-bashи запустите эту команду,
    где21392 PID вашего процесса.
node -e "process._debugProcess(21392)"
  1. ты должен это увидеть
  2. Начать отладку из VSCode Attach to 9229

Теперь все должно быть готово.

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