Есть ли способ заставить chrome-devtools (—inspect) автоматически отключаться от завершившегося процесса?

#node.js #debugging #v8

#node.js #отладка #v8

Вопрос:

Процесс, как он есть:

  1. запустите код с помощью —debug —inspect:

    "debug": "node --max-old-space-size=8192 --debug=5567 --inspect dist/index.js",

  2. Откройте devtools с предоставленным URL, что-то вроде:

    chrome-devtools://devtools/remote/serve_file/@62cd277117e6f8ec53e31b1be58290a6f7ab42ef/inspector.html?experiments=trueamp;v8only=trueamp;ws=localhost:9229/node

  3. Выполните некоторую отладку.

  4. Осознайте, что у вас ошибка, завершите процесс (Ctrl-C) и внесите изменения в код.

  5. Перезапуск.

  6. Сбой запуска: Unable to open devtools socket: address already in use

  7. Поймите, что вам нужно вручную обновить chrome-devtools страницу, чтобы заставить ее понять, что процесс больше не доступен.

Инспектор узлов был намного лучше в этом. Я чего-то не понимаю? Какой-нибудь флаг, который chrome-devtools автоматически отключит процесс, который остановился?

 $ versions
npm 3.10.3
node v6.7.0
OS Darwin 15.6.0 Darwin Kernel Version 15.6.0
  

редактировать: я начал использовать диспетчер инспекторов узлов (расширение Chrome) и обнаружил, что весь этот процесс прошел намного лучше.

Ответ №1:

У меня нет этой проблемы, chrome-devtools показывает мне сообщение о том, что отладочное соединение было закрыто, когда я Ctrl-C обрабатываю узел.

На какой системе вы работаете? Может быть, это было исправлено в более новой версии Node или Chrome? Или, может быть, у вас есть что-то в вашем приложении узла, что препятствует правильному завершению работы сокета. Можете ли вы попробовать вместо этого использовать простой скрипт?

jcollum здесь (пользователь835611 должен получить ответ, поскольку они предупредили меня):

У меня было два прослушивателя сигналов завершения процесса:

 process.on('SIGINT', function() {
  logger.warn('SIGINT received. Shutting down.');
  return process.exit(0);
});

process.on('SIGTERM', function() {
  logger.warn('SIGTERM received. Shutting down.');
  return process.exit(0);
});
  

Оказывается, это блокировало инструменты разработчика Chrome от просмотра завершения работы. Я не знаю, как это будет работать, но это то, что я наблюдал. Комментирование process.exit не внесло никаких изменений. Как странно, кажется, что наличие прослушивателя SIGTERM / INT событий блокирует средства разработки Chrome, которые видят, что процесс завершен. Никогда не видел такого побочного эффекта от прослушивателя событий.

Комментарии:

1. Это не было проблемой 6.5.0. Но вы были правы с более простым кодом. Он отлично работает с образцом узла Hello World. Прерывается с Hapi.js кодовая база, которую я запускаю. Как странно. Я обновлю, если разберусь.