#node.js #debugging #v8
#node.js #отладка #v8
Вопрос:
Процесс, как он есть:
-
запустите код с помощью —debug —inspect:
"debug": "node --max-old-space-size=8192 --debug=5567 --inspect dist/index.js",
-
Откройте devtools с предоставленным URL, что-то вроде:
chrome-devtools://devtools/remote/serve_file/@62cd277117e6f8ec53e31b1be58290a6f7ab42ef/inspector.html?experiments=trueamp;v8only=trueamp;ws=localhost:9229/node
-
Выполните некоторую отладку.
-
Осознайте, что у вас ошибка, завершите процесс (Ctrl-C) и внесите изменения в код.
-
Перезапуск.
-
Сбой запуска:
Unable to open devtools socket: address already in use
-
Поймите, что вам нужно вручную обновить
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 кодовая база, которую я запускаю. Как странно. Я обновлю, если разберусь.