Skip to content

Отладка Node.js

Это руководство поможет вам начать отладку ваших приложений и скриптов Node.js.

Включение инспектора

При запуске с ключом --inspect процесс Node.js начинает прослушивание подключений от клиента отладки. По умолчанию он будет прослушивать на хосте и порту 127.0.0.1:9229. Каждому процессу также назначается уникальный UUID.

Клиенты инспектора должны знать и указывать адрес хоста, порт и UUID для подключения. Полный URL будет выглядеть примерно так: ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e.

Node.js также начнет прослушивание сообщений отладки, если получит сигнал SIGUSR1. (SIGUSR1 недоступен в Windows.) В Node.js 7 и более ранних версиях это активирует устаревший API отладчика. В Node.js 8 и более поздних версиях он активирует API инспектора.

Вопросы безопасности

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

Открытие порта отладки для публичного доступа небезопасно

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

По умолчанию node --inspect привязывается к 127.0.0.1. Вам необходимо явно указать общедоступный IP-адрес или 0.0.0.0 и т. д., если вы хотите разрешить внешним клиентам подключаться к отладчику. Это может подвергнуть вас потенциально значительной угрозе безопасности. Мы рекомендуем вам обеспечить наличие соответствующих брандмауэров и средств контроля доступа, чтобы предотвратить угрозу безопасности.

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

Локальные приложения имеют полный доступ к инспектору

Даже если вы привязываете порт инспектора к 127.0.0.1 (по умолчанию), любые приложения, работающие локально на вашем компьютере, будут иметь неограниченный доступ. Это сделано специально, чтобы локальные отладчики могли удобно подключаться.

Браузеры, WebSockets и политика одного источника

Веб-сайты, открытые в веб-браузере, могут отправлять запросы WebSocket и HTTP в соответствии с моделью безопасности браузера. Для получения уникального идентификатора сеанса отладчика необходимо первоначальное HTTP-соединение. Политика одного источника (same-origin-policy) предотвращает возможность веб-сайтов устанавливать это HTTP-соединение. Для дополнительной защиты от атак DNS-ребиндинга Node.js проверяет, указывают ли заголовки 'Host' для соединения точно IP-адрес или localhost.

Эти политики безопасности запрещают подключение к удалённому серверу отладки путём указания имени хоста. Вы можете обойти это ограничение, указав либо IP-адрес, либо используя SSH-туннели, как описано ниже.

Клиенты инспектора

Минимальный отладчик командной строки доступен с помощью node inspect myscript.js. Несколько коммерческих и open-source инструментов также могут подключаться к Node.js Inspector.

Chrome DevTools 55+, Microsoft Edge

  • Вариант 1: Откройте chrome://inspect в браузере на основе Chromium или edge://inspect в Edge. Нажмите кнопку «Настроить» и убедитесь, что указаны ваш целевой хост и порт.
  • Вариант 2: Скопируйте devtoolsFrontendUrl из вывода /json/list (см. выше) или подсказку --inspect и вставьте в Chrome.

См. https://github.com/ChromeDevTools/devtools-frontend, https://www.microsoftedgeinsider.com для получения дополнительной информации.

Visual Studio Code 1.10+

  • В панели отладки нажмите значок настроек, чтобы открыть .vscode/launch.json. Выберите "Node.js" для начальной настройки.

См. https://github.com/microsoft/vscode для получения дополнительной информации.

JetBrains WebStorm и другие IDE JetBrains

  • Создайте новую конфигурацию отладки Node.js и нажмите «Отладка». --inspect будет использоваться по умолчанию для Node.js 7+. Чтобы отключить, снимите флажок js.debugger.node.use.inspect в реестре IDE. Чтобы узнать больше о запуске и отладке Node.js в WebStorm и других IDE JetBrains, ознакомьтесь со справкой WebStorm онлайн.

chrome-remote-interface

Gitpod

  • Запустите конфигурацию отладки Node.js из представления «Отладка» или нажмите F5. Подробные инструкции

См. https://www.gitpod.io для получения дополнительной информации.

Eclipse IDE с расширением Eclipse Wild Web Developer

  • Из файла .js выберите Отладить как... > Программа Node, или создайте конфигурацию отладки для подключения отладчика к запущенному приложению Node.js (уже запущенному с --inspect).

См. https://eclipse.org/eclipseide для получения дополнительной информации.

Параметры командной строки

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

ФлагОписание
--inspectВключить отладку с помощью Node.js Inspector. Слушать по адресу и порту по умолчанию (127.0.0.1:9229)
--inspect-brkВключить отладку с помощью Node.js Inspector. Слушать по адресу и порту по умолчанию (127.0.0.1:9229); Прервать выполнение до начала пользовательского кода
--inspect=[host:port]Включить агент инспектора; Привязать к адресу или имени хоста host (по умолчанию: 127.0.0.1); Слушать на порту port (по умолчанию: 9229)
--inspect-brk=[host:port]Включить агент инспектора; Привязать к адресу или имени хоста host (по умолчанию: 127.0.0.1); Слушать на порту port (по умолчанию: 9229); Прервать выполнение до начала пользовательского кода
--inspect-waitВключить агент инспектора; Слушать по адресу и порту по умолчанию (127.0.0.1:9229); Ожидать подключения отладчика.
--inspect-wait=[host:port]Включить агент инспектора; Привязать к адресу или имени хоста host (по умолчанию: 127.0.0.1); Слушать на порту port (по умолчанию: 9229); Ожидать подключения отладчика.
node inspect script.jsСоздать дочерний процесс для запуска пользовательского скрипта под флагом --inspect; и использовать основной процесс для запуска отладчика CLI.
node inspect --port=xxxx script.jsСоздать дочерний процесс для запуска пользовательского скрипта под флагом --inspect; и использовать основной процесс для запуска отладчика CLI. Слушать на порту port (по умолчанию: 9229)

Включение сценариев удаленной отладки

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

Предположим, что вы запускаете Node.js на удаленной машине remote.example.com, которую вы хотите отлаживать. На этой машине вы должны запустить процесс node с инспектором, прослушивающим только localhost (по умолчанию).

bash
node --inspect app.js

Теперь, на вашей локальной машине, с которой вы хотите установить соединение клиента отладки, вы можете настроить SSH-туннель:

bash
ssh -L 9225:localhost:9229 remote.example.com

Это запускает сеанс SSH-туннеля, где соединение с портом 9221 на вашей локальной машине будет перенаправлено на порт 9229 на remote.example.com. Теперь вы можете подключить отладчик, такой как Chrome DevTools или Visual Studio Code, к localhost:9221, который должен быть способен отлаживать, как если бы приложение Node.js работало локально.

Устаревший отладчик

Устаревший отладчик снят с поддержки, начиная с Node.js 7.7.0. Пожалуйста, используйте --inspect и Inspector.

При запуске с ключами --debug или --debug-brk в версии 7 и более ранних, Node.js прослушивает команды отладки, определенные устаревшим протоколом отладки V8 на TCP-порту, по умолчанию 5858. Любой клиент отладчика, который использует этот протокол, может подключаться и отлаживать запущенный процесс; несколько популярных из них перечислены ниже.

Протокол отладки V8 больше не поддерживается и не документируется.

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

Запустите node debug script_name.js, чтобы запустить ваш скрипт во встроенном отладчике командной строки. Ваш скрипт запускается в другом процессе Node.js, запущенном с опцией --debug-brk, а исходный процесс Node.js запускает скрипт _debugger.js и подключается к вашей цели. См. документацию для получения дополнительной информации.

node-inspector

Отлаживайте ваше приложение Node.js с помощью Chrome DevTools, используя промежуточный процесс, который переводит протокол инспектора , используемый в Chromium, в протокол отладчика V8, используемый в Node.js. Более подробную информацию см. на странице https://github.com/node-inspector/node-inspector.