Отладка
Node Hero: Глава 10
Перевод книги Node Hero от RisingStack. Переведено с разрешения правообладателей.
В этой главе вы узнаете, как отлаживать Node.js-приложения с помощью модуля debug
, встроенного отладчика Node.js и инструментов разработчика в Chrome.
Баги и дебаггинг
Термины «баг» и «дебаггинг» — часть инженерного жаргона в течение многих десятилетий. Одно из первых упоминаний о багах:
Так было со всеми моими изобретениями. Первый шаг — интуиция, приходящая, как вспышка. Затем возникают трудности: устройство отказывается работать и именно тогда проявляются «жучки» — как называют эти мелкие ошибки и трудности — и требуются месяцы пристального наблюдения, исследований и усилий, прежде чем дело дойдёт до коммерческого успеха или неудачи. Томас Эдисон
Отладка Node.js-приложений
Одним из наиболее часто используемых методов поиска проблем в приложениях Node.js является интенсивное использование console.log
для отладки.
console.log
эффективен для отладки небольших фрагментов, но мы рекомендуем использовать альтернативы получше!
Давайте посмотрим на них!
Модуль debug
Некоторые из наиболее популярных модулей, которые могут потребоваться в вашем проекте, поставляются с модулем debug
. С помощью этого модуля вы можете включить сторонние модули для логирования в стандартный поток вывода — stdout
. Чтобы проверить, использует ли его модуль, посмотрите раздел зависимостей файла package.json
.
Чтобы использовать модуль debug
, вы должны установить переменную среды DEBUG
при запуске вашего приложения. Вы также можете использовать символ *
для имён модулей. Следующая настройка будет выводить все логи, связанные с express, в стандартный поток вывода.
DEBUG=express* node app.js
Вывод в консоль будет выглядеть так:
Встроенный отладчик Node.js
Node.js включает полнофункциональную утилиту для отладки вне процесса, основанную на TCP-подобном протоколе и встроенном дебаггинг-клиенте.
Чтобы запустить встроенный отладчик, вы должны запустить приложение следующим образом:
node debug app.js
Как только вы это сделаете, вы увидите что-то вроде этого:
Базовое использование отладчика Node.js
Для навигации по интерфейсу вы можете использовать следующие команды:
c
=> продолжить выполнение кодаn
=> выполнить эту строку и перейти к следующей строкеs
=> войти в эту функциюo
=> закончить выполнение функции и выйти наружуrepl
=> удалённо выполнить код
Вы можете добавить точки останова в свои приложения, вставив инструкцию debugger
в код.
function add (a, b) {
debugger
return a + b
}var res = add('apple', 4)
Вотчеры
Во время отладки можно наблюдать за изменением значений выражений и переменных. В каждой точке останова каждое выражение из списка наблюдаемых будет исполняться в текущем контексте и отображаться непосредственно перед списком точек останова.
Чтобы начать использовать вотчеры, вы должны «навесить» их для выражений, за значениями которых вы хотите наблюдать. Это можно сделать следующим образом:
watch('expression')
Чтобы получить список активных вотчеров, наберите watchers
, а чтобы перестать отслеживать выражение, используйте unwatch('expression')
.
Подсказка для профессионалов: вы можете переключать процессы Node.js в режим отладки, отправив им команду
SIGUSR1
. После этого вы можете подключить отладчик с помощьюdebug -p <pid>
.
Чтобы понять все возможности встроенного отладчика, ознакомьтесь с официальной документацией API.
Отладчик Chrome
Когда вы начинаете отладку сложных приложений, визуализация может неплохо помочь. Было бы хорошо использовать знакомый пользовательский интерфейс Chrome DevTools для отладки Node.js-приложений, не правда ли?
Хорошие новости! Протокол отладки Chrome уже портирован в Node.js и может использоваться для отладки Node.js-приложений.
Чтобы начать его использовать, вам необходимо сначала установить node-inspector
:
npm install -g node-inspector
После его установки вы можете начать отладку своих приложений, запустив их следующим образом:
// -debug-brk приостанавливает выполнение на первой строкеnode-debug index.js --debug-brk
node-inspector
откроет Chrome DevTools и вы можете приступить к отладке своего Node.js-приложения.
Примечание переводчика: начиная с Node.js 6, интеграция с Chrome DevTools встроена в ядро. Для отладки необходимо запустить приложение с ключом --inspect
.
В следующей главе Node Hero вы узнаете, как защитить ваши Node.js-приложения.
Слушайте наш подкаст в iTunes и SoundCloud, читайте нас на Medium, контрибьютьте на GitHub, общайтесь в группе Telegram, следите в Twitter и канале Telegram, рекомендуйте в VK и Facebook.