четверг, 18 июля 2013 г.

Способы отладки nodejs

Консольный встроенный
1) Вставляем в скрпите точки останова ключевым словом debugger;
2) Запускаем ноду в режиме отладки
$ node debug script.js

3) После этого получаем в терминале, вывод первых строк скрипта, подсветку первой строки, и подсказку того, что скрипт запущен в режиме отладки и остановлен на первой строке, ожидается ввода команд для управления отладки:
debug>

4) Можем нажать c - continue, что запустить скрипт в нормальном режиме, пока его выполнение не наткнется на ключевое слово debugger;. Дальше мы можем шагать по сприпту s(step), а также запускать repl, такой же командой, а там выводить переменные что нас интересуют и выполнять любой код, который мы введем.



Отладка под бразером Chrome(или другим)
Известно, что частью nodejs является виртуальная машина от Google v8, у нее есть возможность запуска в дебаг режиме, и подключения к виртуалке по протоколу DebuggerProtocol. Детали здесь: https//code.google.com/p/v8/wiki/DebuggerProtocol . Мы можем передавать команды для дебагера в json формате, а он их будет выполнять.
Чтобы запустить v8 в дебаг режиме из под ноды, нужно ноду запустить с ключем:
$ node --debug script.js

После чего в консоль наму будет выведено, на какой порт(по-умолчанию 5858) можно подключаться для передачи отладочных команд по вышеуказанному апи.
Мы можем это делать руками, но есть намного продуктивнее способ - воспользоваться модулем ноды node-inspector

Нужно начать с того, что нужно установить этот модуль, и не видно причин, чтобы не установить его глабально:
$ npm i -g node-inspector

Теперь мы запускаем этот модуль, он создает вебсервер на express, и мы можем по выведенному им урлу обратиться к нему через браузер, при этот веб-приложением эмулирует привычную консоль Chrome, и мы смело можем дебажить серверный js, который ранее запустили в дебаг режиме. Веб-страница общается с нод-инспектором по протоколу WebSocket, испектор же передает json для управления нашего приложения в дебаг-моде.

Когда у нас есть запущенный нод в режиме --дебаг, мы можем запустить веб-приложение node-inspector:
node-inspector --web-port=8080 --web-host=0.0.0.0

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

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

Есть еще один прикол, если у нас скрипт исчисления, который просто выполняется и возвращает результат, и допустим у нас результат не верный, как же его отладить, ведь нод-исперктор не сможет подключится, потому что скрипт не слушает никаких портов, просто выполняется и после выполнения закрывает порт дебага. Для этого существует команда запустить сприпт и остановить на первой же стороке:
$ node --debug-brk script.js

Теперь инспектор сможет подключиться к данному скрипту, при этом дебаг остановится на первой строке выполнения.

Отладка через дебагер IDE
IDE запускает ноду выполняя команду с подбором свободного порта(если 5858 занят)
$ node --debug-brk=5858 script.js

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


Итог: самый надежный способ отладки через нод-испектор. Возможно WebShtorm клиент такой же хорош, но при любых подозрениях проблем в нем, можно всегда запуститьт нод-инспектор.

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

Отправить комментарий