14. Уроки Node.js. Отладка скриптов. Часть 1.

558936827d369

Следующая наша тема касается отладки под Node.JS. первым делом мы рассмотрим самый простой встроенный отладчик, который вызывается командой node debug. Выглядит это так. Допустим, у нас есть скрипт:

Например, server.js, который упорно глючит, и мы хотели бы остановить его на некотором моменте, чтоб посмотреть переменные и что происходит. Поэтому мы в этом месте ставим debugger:

И запускаем скрипт в режиме откладки: node debug server.js. Никаких модулей для этого ставит не надо. Изначально скрипт находится в состоянии паузы. Видите, ничего не происходит. В режиме откладки есть некоторые команды, из которых мне сейчас нужна cont. Она заставит скрипт продолжить выполнение. Как видите, он продолжил и даже вывел в что-то конце log. Отлично!

Теперь перейдем к браузеру и зайдем на url 127.0.0.1:1337 с этим портом. Как мы зайдем, происходит событие request, запускается обработчик, и выполнение останавливается как раз на команде debugger. Теперь я могу перейти в консоль repl – режим выполнения команд, и, например, выяснить, что такое urlParsed, или запустить что-то, скажем:

res.end(“Uahahaha!”) 

И смотрим, что стало с браузером. Отлично! Все работает.

Надо сказать, что встроенный отладчик, который мы рассмотрели, это самое простое, что только бывает. Его используют в тех редких случаях, когда более продвинутые способы отладки почему-то не работают, или когда лень их запускать.

Node.JS-Debugging-Tools

Гораздо удобнее осуществлять отладку, используя инструмент разработчиков в браузере Chrome. Для этого нам понадобится утилита, которая называется Nodeinspector:

npm install -g node-inspector

Поставим ее глобально. На этом приготовления завершены. Теперь несколько слов о том, что сейчас будет происходить. У Node.js при запуске есть специальный параметр —debug, после которого можно написать скрипт(–debug server.js). Когда Node.js запускается с этим параметром, то он не только запускает server.js, он также начинает слушать происходящее на этом порту. К этому порту может подключиться другая программа и давать команды Node.js относящиеся к отладке, например, приостановить или возобновить выполнение, получить текущее значение какой-то переменной и т.д. эти команды выдаются в соответствии со специальным протоколом, который описан в документации к v8. Например, команда

{“seq”:117,”type”:”request”,”command”:”continue”}  

означает продолжить выполнение continue. А вот такая:

“seq”:117,”type”:”request”,”command”:”evaluate”,”arguments”:{“expression”:”1+2″}}

говорит Node.js вычислить  1+2. Мы, конечно же, эти команды вручную набирать не будем, хотя могли бы. Мы используем утилиту Nodeinspector, которая будет посылать эти команды, а нам предоставлять красивый веб-интерфейс.

Итак, оставлю Node.js запущенным и открою новое окно консоль, в котором запущу nodeinspector. Это веб-сервер, к которому можно подсоединиться под этим url, который он дает, и работать с отладчиком. То есть, я буду слать команды веб-серверу Nodeinspector, а он будет транслировать их для Node, которая слушает протокол отладки, используя язык отладки v8.

Итак, зайдем в Nodeinspector. Этот дизайн похож на встроенные Chrome  инструменты разработки, но на самом деле, это не они. Они похожи, поскольку стили, html взяты из движка webkit. Соответственно, интерфейс очень похож. На самом деле, это всего лишь веб страница, которую нам отдает Nodeinspector.

Зайдем в отдельном окне  на страницу:

http://127.0.0.1:1337/echo?message=TEST

Произошло следующее. Когда я перешел по этому адресу, то сработала функция обработчика request. Если бы Node.js был запущен без флагов отладки, то команда debugger была бы проигнорирована, но в нашем случае она сработала. v8 приостановила выполнение JavaScript и послала Nodeinspector, который подключен к Node по этому порту: 5858, об этом информацию. Nodeinspector ее получил и при помощи протокола web-soсkеt, с которым познакомимся далее, переслал ее в браузер, браузерному JavaScript. Здесь на это отреагировал веб-интерфейс и мне показал мне остановку. Этот же интерфейс запросил данные об остановке, которым я могу воспользоваться. При этом, Nodeinspector берет на себя трансляцию моих действий в команды для отладчика v8. Могу даже использовать console.Если хочу ответить на запрос, то могу сделать так же, как делал со встроенным отладчиком, а именно вызвать метод в текущем контексте.

Все очень удобно. Этим рекомендуется пользоваться. Единственное, следует иметь в виду, что мы работаем с цепочкой соединений. Зайдя в данный url к Nodeinspector, присоединяемся из клиентского браузерного JavaScript к серверному Nodeinspector, тот присоединяется к Node.js, и бывает так, что некоторое из этих соединений рвется. Соответственно, отладки перестают работать. В этом случае можно зайти заново на станицу отладки, если это не помогло, перезапустить Nodeinspector. Если и это не помогло, то перезапустить по цепочке все: Node, Nodeinspector, и зайти заново на страницу в браузере. Тогда точно все будет хорошо.

tumblr_ng6oke7J1k1sxr61eo1_1280

Материалы взяты из следующего скринкаста

We are looking forward to meeting you on our website soshace.com

About the author

Stay Informed

It's important to keep up
with industry - subscribe!

Stay Informed

Looks good!
Please enter the correct name.
Please enter the correct email.
Looks good!

Related articles

Уроки Express.js . Логгер, Конфигурация, Шаблонизация с EJS. Часть 2.

Favicon – это все connect Middleware, он смотрит, если url имеет вид favicon.ico, то он читает favicon и ...

3. Уроки Express.js. Шаблонизация с EJS: Layout, Block, Partials

В реальной жизни у нас обычно больше, чем один шаблон. Более того, если уж так ...

24.11.2016

Уроки Express.js. Основы и Middleware. Часть 2.

Всем привет! Давайте продолжим наш урок об основах Express и Middleware. Итог (добавим в ...

No comments yet

Sign in

Forgot password?

Or use a social network account

 

By Signing In \ Signing Up, you agree to our privacy policy

Password recovery

You can also try to

Or use a social network account

 

By Signing In \ Signing Up, you agree to our privacy policy