Отладка кода примерно делится на методы отладки.Журнал (Журнал)а такжеТочка остановаДва пути. Журнал предназначен для ручного добавления печати журнала в код для получения информации о процессе для определения проблемы. Преимущество этого метода заключается в том, что отладка проста, и инженер, имеющий опыт в бизнесе, может очень быстро найти бизнес-проблемы с помощью хорошего онлайн-журнала. Однако его недостатки также весьма очевидны: получаемый контент относительно прост, а динамическая отладка требует постоянного добавления кодов печати логов в бизнесе.
Так появилась отладка точек останова. Отладка точки останова аналогична наблюдению, слушанию и исследованию в традиционной китайской медицине.Установив точку останова в точке, которую необходимо наблюдать, мы можем получить весь контекст программы, работающей до этой точки, в деталях, и использовать однократно пошаговая отладка для наблюдения за состоянием работы программы один за другим и точного определения проблемы. Кроме того, с помощью Chrome DevTool мы также можем в любой момент отладить онлайн-бизнес, что очень удобно.
V8 Inspector
Очень хорошо использовать Chrome DevTool для отладки точек останова на внешнем интерфейсе, и аналогичный инструмент также включен в Node.js (6.3+).Отладчик, в основном реализованный внутри Node.Набор протоколов связи отладчика версии 8.. добавлено при запуске--inspect
параметры, мы можем получить интерфейс отладки Chrome DevTools, а остальная часть процесса отладки такая же, как и обычная отладка Chrome.
использовать--inspect
Отладка значительно упрощает разработку Node.js и позволяет выполнять отладку на стороне сервера так же, как и отладку внешнего интерфейса. Помимо прямого открытия DevTools для отладки, VSCode, WebStorm и другие средства разработки также интегрируют его в редактор, но внутренний принцип аналогичен. Однако никто не идеален, и отладка Node Inspector также имеет некоторые недостатки при использовании:
- Необходимо добавить после команды node
--inspect
Параметры для запуска некоторых сторонних команд не могут напрямую поддерживать отладку, напримерwebpack
,ava
,mocha
... - Многопроцессная отладка очень хлопотна, особенно когда дочерний процесс часто уничтожается, необходимо вручную отслеживать создание процесса и вручную подключать процесс к средству отладки.
Примечание:Хотя VSCode использует режим Inspector Protocol, в версии 1.22 он может автоматически связывать многопроцессорные порты прослушивания.«VSCode Debug Egg Perfect Edition».
ndb
Две недели назад Chrome Labs открыла исходный код нового инструмента отладки, который сегодня является нашим главным героем —ndb. Он обеспечивает лучший опыт отладки.Как говорится в официальном репозитории, он предоставляет нам следующие функции:
- Автоматическое обнаружение подпроцесса и доступ к отладке
- Поддерживает отключение питания перед загрузкой модуля
- Поддерживает прямое редактирование файлов в средстве отладки и автоматически обновляет локальные файлы после сохранения.
- По умолчанию ndb включен для всех скриптов за пределами указанной папки проекта.модель черного ящикаДавайте больше сосредоточимся на бизнес-коде. Скрипты вне папки проекта включают файлы модулей, поставляемые с Node.js (например,
_stream_wrap.js
,async_hooks.js
,fs.js
Ждать). Конечно, вы можете изменить конфигурацию «Черный ящик за пределами рабочего каталога» в настройках, чтобы отключить эту функцию.
Установить
npm install -g ndb
Сначала убедитесь, что ваша среда Node.js >= 8.0.0, затем используйтеnpm install
Завершить установку может быть очень удобно. Поскольку ndb зависит от Puppeteer, Chromium будет загружен в процессе установки, поэтому процесс загрузки может занять некоторое время, терпеливо подождите. Если есть проблема с разрешениемОфициальные советыпопробуй увеличить--unsafe-perm=true --allow-root
разрешение параметра.
использовать
отличный отnode --inspect
Комплексное использование ndb очень просто. добавить перед выполнением любого скрипта, который вы хотите отладитьndb
команду, и вы даже можете использовать ее напрямуюndb
команда для запуска скрипта. Вот несколько способов начать, приведенных в примере репо:
ndb node server.js
ndb npm run test
ndb mocha
ndb .
а также--inspect
Точно так же после выполнения команды появится интерфейс отладки Chrome DevTools. В этом специально созданном интерфейсе отладки вы можете:
- Отладка точек останова, пошаговая отладка асинхронных методов
- приставкадисплей перед исполнением(требуется Node.js >= 10)
- Анализ образца JS
- анализ памяти
- местный терминал
Отладка ThinkJS с помощью ndb
Следующее основано наThinkJSРазработал проект Node.js.FirekylinВ качестве примера кратко рассмотрим, как использовать ndb для отладки точек останова.
(Поскольку Nuggets в настоящее время не поддерживает встроенное видео, для просмотра всем необходимо перейти на Tencent Video.)
V.QQ.com/small/afraid/he 074…
Видно, что базовый процесс отладки очень прост, а многопроцессный проект адаптируется автоматически (на видео запускается 8 процессов), что решает проблему использования--inspect
два вопроса. Кроме того, поскольку консоль внизу представляет собой среду REPL, данные текущей среды в точке останова могут быть получены в режиме реального времени, например, мы можем вывестиprocess.memoryUsage()
Просмотр текущего использования памяти.
Помимо отладки точек останова, ndb также поддерживает анализ памяти и производительности, что может помочь нам в анализе утечек памяти и . Подробности смотрите в официальной документации«Chrome DevTool решает проблемы с памятью».
ndb проблема
По-прежнему говорят, что никто не совершенен, и ndb по-прежнему чувствует себя немного некомфортно при его использовании в настоящее время. В основном с точки зрения обновлений файлов.В настоящее время код все еще пишется в редакторе кода, а отладку нужно делать на интерфейсе ndb.Частое переключение ощущается немного неприятно. Я надеюсь, что для VSCode будет очень удобно внедрить ndb для замены существующих инструментов отладки как можно скорее.
Некоторые студенты скажут, почему бы не редактировать файлы непосредственно в ndb, ведь поддержка редактирования и сохранения файлов также является важной функцией ndb как средства отладки. Это связано с тем, что отладка каждого процесса в среде с несколькими процессами не зависит друг от друга.Изменение файла, которое вы делаете в одном процессе, может быть отражено только в измененном процессе и не может вступить в силу во всех процессах, что не сильно отличается от нашей локальной работы с файлами.То же самое,нужно быть осторожным при его использовании. Однако это также относительно легко решить, и при отладке можно открыть только один процесс.
постскриптум
В Node.js появляется все больше и больше инструментов, помогающих нам в отладке точек останова.От раннего протокола отладки до протокола инспектора V8, поддерживаемого в первые два года, и текущего ndb — мы видим, что технология шаг за шагом продвигается вперед. конечно, мы должны поблагодарить инженеров Chrome за разработку такого замечательного инструмента. Конечно, помимо пошаговой отладки с точками останова, для его существования также необходима отладка по логу.Они могут дополнять друг друга.Нет разницы между хорошим и плохим.
Наконец, я отправлю вам фотографию, чтобы пожелать всем плавного изменения BUG на новой неделе ~
Использованная литература: