В VS Code есть встроенный дебаггер, но не смотря на то, что я использую этот инструмент уже давно, Node.js код я дебажу с помощью node-inspector. Сначала запускаю дебаггер: node-inspector --web-port 8088 --save-live-edit true --preload false, затем приложение: node --debug app или node --debug-brk app (по ситуации), после чего открываю в браузере интерфейс дебаггера по адресу http://127.0.0.1:8088/?ws=127.0.0.1:8088&port=5858. Расскажу как я пытался перейти на встроенный дебаггер VS Code.
Допустим у нас есть приложение (app.js), которое рассказывает об изменении своего состояния другому сервису (logger.js).
- app.js:
- logger.js:
Запускаем логгер, приложение, останавливаем приложение...
... в общем ясно как все должно работать.
А теперь попробуем дебажить код приложения с помощью встроенного дебаггера: запускаем, останавливаем...
... разумеется приложение ничего не сообщило логгеру т.к. мы слушаем только событие SIGINT процесса.
Беда в том, что дебаггер не отправляет ни SIGINT, ни какого-либо иного сигнала приложению (в Windows вообще нет POSIX-сигналов), а обработчик события exit не работает асинхронно.
Поэтому лучше запустить приложение руками, можно из встроенного в VS Code терминала:
Подключаемся к дебаггеру:
Вуаля:
Останавливаем приложение:
Все ОК, единственное неудобство - по Ctrl+C закрывается терминал.
That's all folks!
P.S. Вчера, 09.09.2016, вышло очередное обновление VS Code в результате которого в дебаге Node.js кое-что изменилось.
P.P.S. В версии 1.8 решили вопрос с Ctrl+C, ура.
Допустим у нас есть приложение (app.js), которое рассказывает об изменении своего состояния другому сервису (logger.js).
- app.js:
'use strict'; const http = require('http'); const checkin = (status, cb) => http.get({ port: 3030, headers: { 'x-server-port': 3000, 'x-server-status': status } }, (res) => { if (res.statusCode !== 200) return cb(new Error('Epic fail')); cb(); }).on('error', cb); http.createServer((req, res) => { res.writeHead(200, { 'content-type': 'text/html' }); res.end('<h2>Hello, world!</h2>'); }).listen(3000, (err) => { if (err) throw err; checkin('on', (err) => { if (err) throw err; console.log('Listen on port 3000'); }); }); process.once('SIGINT', () => { checkin('off', (err) => { if (err) console.error(err); process.exit(0); }); });
- logger.js:
'use strict'; const http = require('http'); const log = (headers) => { console.log(`port: ${headers['x-server-port']}, status: ${headers['x-server-status']}`); }; http.createServer((req, res) => { log(req.headers); res.writeHead(200); res.end(); }).listen(3030, (err) => { if (err) throw err; console.log('Listen on port 3030'); });
Запускаем логгер, приложение, останавливаем приложение...
... в общем ясно как все должно работать.
А теперь попробуем дебажить код приложения с помощью встроенного дебаггера: запускаем, останавливаем...
... разумеется приложение ничего не сообщило логгеру т.к. мы слушаем только событие SIGINT процесса.
Беда в том, что дебаггер не отправляет ни SIGINT, ни какого-либо иного сигнала приложению (в Windows вообще нет POSIX-сигналов), а обработчик события exit не работает асинхронно.
Поэтому лучше запустить приложение руками, можно из встроенного в VS Code терминала:
Подключаемся к дебаггеру:
Вуаля:
Останавливаем приложение:
Все ОК, единственное неудобство - по Ctrl+C закрывается терминал.
That's all folks!
P.S. Вчера, 09.09.2016, вышло очередное обновление VS Code в результате которого в дебаге Node.js кое-что изменилось.
P.P.S. В версии 1.8 решили вопрос с Ctrl+C, ура.
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации