Изготовление сайтов в Донецке, ДНР. Как отладить приложение Node.js: советы, рекомендации и инструменты

 
 

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

Что такое отладка?

Отладка — это черное искусство исправления программных дефектов. Исправить ошибку часто легко — исправленный символ или дополнительная строка кода решают проблему. Обнаружение этой ошибки — другое дело, и разработчики могут потратить много несчастливых часов, пытаясь найти источник проблемы. К счастью, в Node.js есть отличные инструменты для отслеживания ошибок.

Терминология

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

Срок Объяснение

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

отладчик инструмент, который предлагает средства отладки, такие как запуск кода построчно для проверки состояния внутренних переменных

характерная черта как в утверждении: «это не баг, это фича». Все разработчики говорят это в какой-то момент своей карьеры.

частота как часто или при каких условиях будет возникать ошибка

это не работает наиболее часто публикуемый, но наименее полезный отчет об ошибке

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

Ведение журнала вывод исполняемой информации на консоль или в файл

логическая ошибка программа работает, но не работает так, как задумано

приоритет где ошибка выделена в списке запланированных обновлений

состояние гонки трудно отследить ошибки, зависящие от последовательности или времени неконтролируемых событий

рефакторинг переписывание кода для удобства чтения и обслуживания

регрессия повторное появление ранее исправленной ошибки, возможно, из-за других обновлений

Связанный ошибка, похожая или связанная с другой

воспроизводить шаги, необходимые для возникновения ошибки

Ошибка RTFM некомпетентность пользователя, замаскированная под отчет об ошибке, за которым обычно следует ответ «Прочитайте руководство по перелистыванию»

шаг в при запуске кода построчно в отладчике переходить к вызываемой функции

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

переступить при выполнении построчно завершить выполнение команды, не переходя в вызываемую ею функцию

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

трассировки стека исторический список всех функций, вызванных до возникновения ошибки

ошибка синтаксиса опечатки, такие какconsole.lug ()

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

смотреть переменная для проверки во время выполнения отладчика

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

Как избежать ошибок

Ошибки часто можно предотвратить до того, как вы протестируете свое приложение...

Используйте хороший редактор кода

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

Разработчики Node.js избалованы выбором бесплатных редакторов, таких как VS Code, Atom и Brackets, а также множества коммерческих альтернатив.

Используйте линтер кода

Линтер может сообщать об ошибках кода, таких как синтаксические ошибки, плохой отступ, необъявленные переменные и несовпадающие скобки, прежде чем вы сохраните и протестируете свой код. Популярные варианты для JavaScript и Node.js включают ESLint, JSLint и JSHint.

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

eslint myfile.js

Однако у большинства линтеров есть плагины для редактирования кода, такие как ESLint для VS Code и linter-eslint для Atom, которые проверяют ваш код по мере его ввода:

ESLint для кода VS

Используйте систему управления версиями

Система управления исходным кодом, такая как Git, может помочь защитить ваш код и управлять версиями. Становится легче обнаружить, где и когда была введена ошибка и кто должен нести вину! Интернет-репозитории, такие как GitHub и Bitbucket, предлагают бесплатное пространство и инструменты управления.

Внедрите систему отслеживания проблем

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

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

Используйте разработку через тестирование

Разработка через тестирование (TDD) — это процесс разработки, который побуждает разработчиков писать код, проверяющий работу функции до ее написания — например, возвращается ли X, когда функции Y передается вход Z.

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

Шаг в сторону

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

Отладка Node.js: переменные среды

Переменные среды, заданные в основной операционной системе, можно использовать для управления настройками приложения Node.js. Наиболее распространенным является NODE_ENV, который обычно устанавливается developmentпри отладке.

Переменные среды можно установить в Linux/macOS:

NODE_ENV=development

Окна cmd:

set NODE_ENV=development

Или Windows PowerShell:

$env: NODE_ENV="development"

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

// is NODE_ENV set to «development»?

const DEVMODE = (process.env.NODE_ENV === 'development’) ;

if (DEVMODE) {

console.log ('application started in development mode on port ${PORT}') ;

}

NODE_DEBUGпозволяет отлаживать сообщения с помощью Node.js util.debuglog (см. ниже), а также обращаться к документации по основным модулям и платформам, чтобы узнать о дополнительных параметрах.

Обратите внимание, что переменные среды также можно сохранить в.envфайл. Например:

NODE_ENV=development

NODE_LOG=. /log/debug.log

SERVER_PORT=3000

DB_HOST=localhost

DB_NAME=mydatabase

Затем загружается с помощью dotenvмодуля:

require ('dotenv’).config () ;

Отладка Node.js: параметры командной строки

Различные параметры командной строки могут быть переданы nodeсреде выполнения при запуске приложения. Одним из наиболее полезных является —trace-warnings, который выводит трассировку стека для предупреждений о процессах (включая устаревание).

Можно установить любое количество параметров, в том числе:

enable-source-maps: включить исходные карты (экспериментально)

throw-deprecation: выдавать ошибки при использовании устаревших функций

—inspect: активировать инспектор V8 (см. ниже)

В качестве примера попробуем записать свойство модуля cryptoDEFAULT_ENCODING, которое устарело в Node v10:

const crypto = require ('crypto’) ;

function bar () {

console.log (crypto.DEFAULT_ENCODING) ;

}

function foo () {

bar () ;

}

foo () ;

Теперь запустите это со следующим:

node index.js

Затем мы увидим это:

buffer

(node:7405) [DEP0091] DeprecationWarning: crypto.DEFAULT_ENCODING is deprecated.

Однако мы также можем сделать это:

node —trace-warnings index.js

Это производит следующее:

buffer

(node:7502) [DEP0091] DeprecationWarning: crypto.DEFAULT_ENCODING is deprecated.

at bar (/home/Desktop/index.js:4:22)

at foo (/home/Desktop/index.js:8:3)

at Object. (/home/Desktop/index.js:11:1)

at Module. _compile (internal/modules/cjs/loader.js:1151:30)

at Object.Module. _extensions...js (internal/modules/cjs/loader.js:1171:10)

at Module.load (internal/modules/cjs/loader.js:1000:32)

at Function.Module. _load (internal/modules/cjs/loader.js:899:14)

at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)

at internal/main/run_main_module.js:17:47

Это говорит нам о том, что предупреждение об устаревании исходит из кода в строке 4 (console.logоператор), который был выполнен при запуске barфункции. Функция barбыла вызвана fooфункцией в строке 8, а fooфункция была вызвана в строке 11 нашего скрипта.

Обратите внимание, что те же самые параметры также могут быть переданы в nodemon.

Консольная отладка

Один из самых простых способов отладки приложения — это вывод значений в консоль во время выполнения:

console.log (myVariable) ;

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

consoleметод описание

.log (msg) вывести сообщение в консоль

.dir (obj, opt) использует util.inspectдля красивой печати объектов и свойств

.table (obj) выводит массивы объектов в табличном формате

.error (msg) вывести сообщение об ошибке

.count (label) именованный счетчик, сообщающий о том, сколько раз выполнялась строка

.countReset[label] сбрасывает именованный счетчик

.group (label) делает отступ для группы сообщений журнала

.groupEnd (label) заканчивает группу с отступом

.time (label) запускает таймер для расчета продолжительности операции

.timeLog ([label] сообщает время, прошедшее с момента запуска таймера

.timeEnd (label) останавливает таймер и сообщает общую продолжительность

.trace () выводит трассировку стека (список всех вызывающих функций)

.clear () очистить консоль

console.log () принимает список значений, разделенных запятыми. Например:

let x = 123;

console.log ('x:', x) ;

// x: 123

Однако деструктуризация ES6 может предложить аналогичный результат с меньшими усилиями по вводу:

console.log ({x}) ;

// { x: 123 }

Более крупные объекты могут быть выведены в виде сжатой строки, используя это:

console.log (JSON.stringify (obj));

util.inspectформатирует объекты для облегчения чтения, но console.dir () делает всю тяжелую работу за вас.

Node.jsutil.debuglog

Модуль Node.js utilпредлагает встроенный debuglogметод, который условно записывает сообщения в STDERR:

const util = require ('util’) ;

const debuglog = util.debuglog ('myapp’) ;

debuglog ('myapp debug message [%d]', 123) ;

Если для NODE_DEBUGпеременной среды задано значение myapp (или подстановочный знак, например *или my*), в консоли отображаются сообщения:

NODE_DEBUG=myapp node index.js

MYAPP 9876: myapp debug message [123]

Вот 9876идентификатор процесса Node.js.

По умолчанию util.debuglogмолчит. Если бы вы запустили приведенный выше сценарий без установки NODE_DEBUGпеременной, на консоль ничего не было бы выведено. Это позволяет вам оставить полезный журнал отладки в вашем коде, не загромождая консоль для обычного использования.

Отладка с помощью модулей журнала

Доступны сторонние модули ведения журналов, если вам потребуются более сложные параметры уровней обмена сообщениями, детализации, сортировки, вывода файлов, профилирования и т. д. Популярные варианты включают в себя:

салон самолета

логарифмический уровень

morgan (промежуточное ПО Express.js)

сосна

сигнал

раскадровка

трассер

Уинстон

Инспектор Node.js V8

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

git clone https://github.com/sitepoint-editors/pagehit-ram

Или вы можете использовать любой свой собственный код.

Node.js — это оболочка для движка JavaScript V8, которая включает в себя собственный инспектор и клиент отладки. Для начала используйте inspectаргумент (не путать с —inspect) для запуска приложения:

node inspect. /index.js

Отладчик остановится на первой строке и отобразит debug>приглашение:

< Debugger listening on ws: //127.0.0.1:9229/6f38abc1-8568-4035-a5d2-dee6cbbf7e44

< For help, see: https://nodejs.org/en/docs/inspector

< Debugger attached.

Break on start in index.js:7

5 const

6 // default HTTP port

> 7 port = 3000,

8

9 // Node.js modules

debug>

Вы можете пройти через приложение, введя:

contили c: продолжить выполнение

nextили n: запустить следующую команду

stepили s: войти в вызываемую функцию

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

pause: приостановить выполнение кода

Другие варианты включают в себя:

просмотр значений переменных с помощьюwatch ('myvar’)

установка точек останова с помощью команды setBreakpoint () /sb () (обычно проще вставить debugger; оператор в код)

restartскрипт

.exitотладчик (. требуется начальный)

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

Отладка Node.js с помощью Chrome

Инспектор Node.js (без клиента отладчика) запускается с —inspectфлагом:

node —inspect. /index.js

Примечание: nodemonможно использовать вместо nodeпри необходимости.

Это запускает прослушивание отладчика 127.0.0.1:9229, к которому может подключиться любой локальный клиент отладки:

Debugger listening on ws: //127.0.0.1:9229/20ac75ae-90c54db6-af6b-d9d74592572f

Если вы запускаете приложение Node.js на другом устройстве или в контейнере Docker, убедитесь, что порт 9229доступен, и предоставьте удаленный доступ, используя это:

node —inspect=0.0.0.0:9229. /index.js

Кроме того, вы можете использовать —inspect-brkдля установки точки останова на первом операторе, чтобы приложение было немедленно приостановлено.

Откройте Chrome и введите chrome: //inspectв адресной строке.

Chrome проверить

Примечание. Если приложение Node.js не отображается как удаленная цель, убедитесь, что установлен флажок «Обнаружение сетевых целей «, затем нажмите «Настроить «, чтобы добавить IP-адрес и порт устройства, на котором запущено приложение.

Щелкните ссылку проверки цели, чтобы запустить DevTools. Это будет сразу знакомо любому, у кого есть опыт отладки браузера.

Инструменты разработчика Chrome

Ссылка + Добавить папку в рабочую область позволяет выбрать, где в вашей системе находятся файлы Node.js, что упрощает загрузку других модулей и внесение изменений.

Щелчок по любому номеру строки устанавливает точку останова, обозначенную зеленым маркером, которая останавливает выполнение при достижении этого кода:

Точка останова Chrome DevTools

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

Панель стека вызовов показывает, какие функции были вызваны для достижения этой точки.

Панель Scope показывает состояние всех доступных локальных и глобальных переменных.

Панель «Точки останова «показывает список всех точек останова и позволяет включать и отключать их.

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

Отладка Node.js с помощью VS Code

Отладку VS Code Node.js можно запустить без какой-либо настройки при запуске приложения Node.js в локальной системе. Откройте исходный файл (обычно index.js), активируйте панель «Выполнить и отладить «и нажмите кнопку «Выполнить и отладить Node.js» (F5).

Отладчик кода VS

Экран отладки похож на Chrome DevTools со списком Variables, Watch, Call stack, Loaded scripts и Breakpoints.

Точка останова кода VS

Точку останова можно установить, щелкнув поле рядом с номером строки. Вы также можете щелкнуть правой кнопкой мыши.

Параметры точки останова VS Code

Щелкнув правой кнопкой мыши, вы можете установить следующее:

Стандартная точка останова.

Условная точка останова, которая останавливается при выполнении условий, например, count > 3.

Логпойнт, который фактически console.log () без кода! Любую строку можно ввести с выражениями, заключенными в фигурные скобки, — например, {count}для отображения значения countпеременной.

Журнал VS Code

Примечание. Не забудьте нажать ReturnVS Code, чтобы создать условную точку останова или точку журнала.

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

Дополнительные сведения см. в разделе Отладка в Visual Studio Code.

Расширенная конфигурация отладки

Дополнительная настройка требуется, когда вы отлаживаете удаленную службу или вам нужно использовать другие параметры запуска. VS Code хранит конфигурации запуска в launch.jsonфайле, сгенерированном внутри.vscodeпапки вашего проекта. Чтобы сгенерировать или отредактировать файл, щелкните значок шестеренки в правом верхнем углу панели «Выполнение и отладка».

Конфигурация запуска VS Code

В массив можно добавить любое количество параметров конфигурации configurations. Нажмите кнопку «Добавить конфигурацию «, чтобы выбрать параметр. Код VS может:

запустить процесс, используя сам Node.js, или

подключиться к процессу инспектора Node.js, возможно, работающему на удаленной машине или контейнере Docker

В приведенном выше примере определена одна конфигурация запуска Nodemon. Сохраните launch.json, выберите nodemonиз раскрывающегося списка в верхней части панели «Выполнение и отладка «и щелкните зеленый значок «Пуск».

Запуск кода VS

Дополнительные сведения см. в разделе Конфигурации запуска VS Code.

Другие инструменты отладки Node.js

Руководство по отладке Node.js содержит рекомендации для других IDE и редакторов, включая Visual Studio, JetBrains, WebStorm, Gitpod и Eclipse. Atom также имеет расширение node-debug.

ndb предлагает улучшенный опыт отладки с мощными функциями, такими как присоединение к дочерним процессам и черный ящик сценариев, поэтому отображается только код в определенных папках.

Инструментарий отчетов IBM для Node.js работает путем анализа выходных данных при nodeзапуске с —experimental-reportпараметром.

Наконец, коммерческие сервисы, такие как LogRocket и Sentry.io, интегрируются с вашим работающим веб-приложением как на клиенте, так и на сервере, чтобы записывать ошибки по мере их обнаружения пользователями.

Получите отладку!

Node.js имеет ряд отличных инструментов отладки и анализаторов кода, которые могут повысить скорость и надежность вашего приложения. console.log () Другое дело, смогут ли они соблазнить вас от этого!

3D-печать5GABC-анализAndroidAppleAppStoreAsusCall-центрChatGPTCRMDellDNSDrupalExcelFacebookFMCGGoogleHuaweiInstagramiPhoneLinkedInLinuxMagentoMicrosoftNvidiaOpenCartPlayStationPOS материалPPC-специалистRuTubeSamsungSEO-услугиSMMSnapchatSonyStarlinkTikTokTwitterUbuntuUp-saleViasatVPNWhatsAppWindowsWordPressXiaomiYouTubeZoomАвдеевкаАктивные продажиАкцияАлександровск ЛНРАлмазнаяАлчевскАмвросиевкаАнализ конкурентовАнализ продажАнтимерчандайзингАнтрацитАртемовскАртемовск ЛНРАссортиментная политикаБелгородБелицкоеБелозерскоеБердянскБизнес-идеи (стартапы)БрендБрянкаБукингВахрушевоВендорВидеоВикипедияВирусная рекламаВирусный маркетингВладивостокВнутренние продажиВнутренний маркетингВолгоградВолновахаВоронежГорловкаГорнякГорскоеДебальцевоДебиторкаДебиторская задолженностьДезинтермедитацияДзержинскДивизионная система управленияДизайнДимитровДирект-маркетингДисконтДистрибьюторДистрибьюцияДобропольеДокучаевскДоменДружковкаЕкатеринбургЕнакиевоЖдановкаЗапорожьеЗимогорьеЗолотоеЗоринскЗугрэсИжевскИловайскИрминоКазаньКалининградКировскКировскоеКомсомольскоеКонстантиновкаКонтент-маркетингКонтент-планКопирайтингКраматорскКрасноармейскКрасногоровкаКраснодарКраснодонКраснопартизанскКрасный ЛиманКрасный ЛучКременнаяКураховоКурскЛисичанскЛуганскЛутугиноМакеевкаМариупольМаркетингМаркетинговая информацияМаркетинговые исследованияМаркетинговый каналМаркетинг услугМаркетологМарьинкаМедиаМелекиноМелитопольМенеджментМерчандайзерМерчандайзингМиусинскМолодогвардейскМоскваМоспиноНижний НовгородНиколаевНиколаевкаНишевой маркетингНовоазовскНовогродовкаНоводружескНовосибирскНумерическая дистрибьюцияОдессаОмскОтдел маркетингаПартизанский маркетингПервомайскПеревальскПетровскоеПлата за кликПоисковая оптимизацияПопаснаяПравило ПаретоПривольеПрогнозирование продажПродвижение сайтов в ДонецкеПроизводство видеоПромоПромоушнПрямой маркетингРабота для маркетологаРабота для студентаРазработка приложенийРаспродажаРегиональные продажиРекламаРеклама на асфальтеРемаркетингРетро-бонусРибейтРитейлРовенькиРодинскоеРостов-на-ДонуРубежноеСамараСанкт-ПетербургСаратовСватовоСвердловскСветлодарскСвятогорскСевастопольСеверодонецкСеверскСедовоСейлз промоушнСелидовоСимферопольСинергияСколковоСлавянскСнежноеСоздание сайтов в ДонецкеСоледарСоциальные сетиСочиСтаробельскСтаробешевоСтахановСтимулирование сбытаСуходольскСчастьеТелемаркетингТельмановоТираспольТорговый представительТорезТрейд маркетингТрейд промоушнТюменьУглегорскУгледарУкраинскХабаровскХарцызскХерсонХостингЦелевая аудиторияЦифровой маркетингЧасов ЯрЧелябинскШахтерскЮжно-СахалинскЮнокоммунаровскЯндексЯсиноватая