Отладка

Node Hero: Глава 10

Andrey Melikhov
devSchacht
4 min readNov 10, 2017

--

Перевод книги 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, в стандартный поток вывода.

Вывод в консоль будет выглядеть так:

Встроенный отладчик Node.js

Node.js включает полнофункциональную утилиту для отладки вне процесса, основанную на TCP-подобном протоколе и встроенном дебаггинг-клиенте.

Чтобы запустить встроенный отладчик, вы должны запустить приложение следующим образом:

Как только вы это сделаете, вы увидите что-то вроде этого:

Базовое использование отладчика Node.js

Для навигации по интерфейсу вы можете использовать следующие команды:

  • c => продолжить выполнение кода
  • n => выполнить эту строку и перейти к следующей строке
  • s => войти в эту функцию
  • o => закончить выполнение функции и выйти наружу
  • repl => удалённо выполнить код

Вы можете добавить точки останова в свои приложения, вставив инструкцию debugger в код.

Вотчеры

Во время отладки можно наблюдать за изменением значений выражений и переменных. В каждой точке останова каждое выражение из списка наблюдаемых будет исполняться в текущем контексте и отображаться непосредственно перед списком точек останова.

Чтобы начать использовать вотчеры, вы должны «навесить» их для выражений, за значениями которых вы хотите наблюдать. Это можно сделать следующим образом:

Чтобы получить список активных вотчеров, наберите watchers, а чтобы перестать отслеживать выражение, используйте unwatch('expression').

Подсказка для профессионалов: вы можете переключать процессы Node.js в режим отладки, отправив им команду SIGUSR1. После этого вы можете подключить отладчик с помощью debug -p <pid>.

Чтобы понять все возможности встроенного отладчика, ознакомьтесь с официальной документацией API.

Отладчик Chrome

Когда вы начинаете отладку сложных приложений, визуализация может неплохо помочь. Было бы хорошо использовать знакомый пользовательский интерфейс Chrome DevTools для отладки Node.js-приложений, не правда ли?

Хорошие новости! Протокол отладки Chrome уже портирован в Node.js и может использоваться для отладки Node.js-приложений.

Чтобы начать его использовать, вам необходимо сначала установить node-inspector:

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

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.

Глава на GitHub

--

--

Andrey Melikhov
devSchacht

Web-developer in big IT company Перевожу всё, до чего дотянусь. Иногда (но редко) пишу сам.