Spec-Zone.ru › Node.js 18 LTS

Инспектор

Устойчивость: 2 - Стабильно

Исходный код: lib/inspector.js

Модуль node:inspector предоставляет API для взаимодействия с инспектором V8.

К нему можно получить доступ, используя:

const inspector = require('node:inspector'); copy

inspector.close()

История
Версия Изменения
v18.10.0

API доступен в потоках-работниках.

v9.0.0

Добавлен в: v9.0.0

Деактивировать инспектор. Ожидает, пока не останется активных подключений.

При использовании Session, объект, выводимый API консоли, не будет освобождён, пока мы вручную не выполним команду Runtime.DiscardConsoleEntries.

inspector.console

  • <Объект> Объект для отправки сообщений в удалённую консоль инспектора.
require('node:inspector').console.log('a message'); copy

Консоль инспектора не имеет полной совместимости с консолью Node.js.

inspector.open([port[, host[, wait]]])

  • port <число> Порт для прослушивания подключений инспектора. Необязательно. По умолчанию: то, что было задано в командной строке.
  • host <строка> Хост для прослушивания подключений инспектора. Необязательно. По умолчанию: то, что было задано в командной строке.
  • wait <логическое> Блокировать выполнение, пока клиент не подключится. Необязательно. По умолчанию: false.

Активировать инспектор на указанном хосте и порту. Эквивалентно node --inspect=[[host:]port], но может быть выполнено программно после запуска node.

Если wait равно true, выполнение заблокируется до подключения клиента к порту инспекции и передачи управления клиенту отладчика.

См. предупреждение о безопасности относительно использования параметра host.

inspector.url()

  • Возвращает: <строка> | <не определено>

Возвращает URL активного инспектора или undefined, если его нет.

$ node --inspect -p 'inspector.url()'
Debugger listening on ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34
For help, see: https://nodejs.org/en/docs/inspector
ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34

$ node --inspect=localhost:3000 -p 'inspector.url()'
Debugger listening on ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a
For help, see: https://nodejs.org/en/docs/inspector
ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a

$ node -p 'inspector.url()'
undefined copy

inspector.waitForDebugger()

Добавлен в: v12.7.0

Блокирует выполнение до получения клиентом (существующим или подключившимся позже) команды Runtime.runIfWaitingForDebugger.

Исключение будет выброшено, если активный инспектор отсутствует.

Класс: inspector.Session

  • Расширяет: <EventEmitter>

Класс inspector.Session используется для отправки сообщений в бэкенд V8 инспектора и получения ответов и уведомлений.

new inspector.Session()

Добавлен в: v8.0.0

Создаёт новый экземпляр класса inspector.Session. Сессии инспектора нужно подключиться через session.connect(), прежде чем можно отправлять сообщения в бэкенд инспектора.

При использовании Session, объект, выводимый API консоли, не будет освобождён, пока мы вручную не выполним команду Runtime.DiscardConsoleEntries.

Событие: 'inspectorNotification'

Добавлен в: v8.0.0
  • <Объект> Объект сообщения-уведомления

Вызывается при получении любого уведомления от V8 инспектора.

session.on('inspectorNotification', (message) => console.log(message.method));
// Debugger.paused
// Debugger.resumed copy

Также можно подписаться только на уведомления с определённым методом:

Событие: <inspector-protocol-method>;

Добавлен в: v8.0.0
  • <Объект> Объект сообщения-уведомления

Вызывается при получении уведомления от инспектора, у которого поле метода установлено в значение <inspector-protocol-method>.

Следующий фрагмент устанавливает слушателя на событие 'Debugger.paused' и выводит причину приостановки исполнения программы всякий раз, когда выполнение приостанавливается (например, из-за точек останова):

session.on('Debugger.paused', ({ params }) => {
  console.log(params.hitBreakpoints);
});
// [ '/the/file/that/has/the/breakpoint.js:11:0' ] copy

session.connect()

Добавлен в: v8.0.0

Подключает сессию к бэкенду инспектора.

session.connectToMainThread()

Добавлен в: v12.11.0

Подключает сессию к бэкенду инспектора основного потока. Исключение будет выброшено, если этот API был вызван не в потоке-работнике.

session.disconnect()

Добавлен в: v8.0.0

Немедленно закрывает сессию. Все ожидающие обратные вызовы сообщения будут вызваны с ошибкой. session.connect() нужно будет вызвать, чтобы снова можно было отправлять сообщения. Переподключенная сессия потеряет всё состояние инспектора, включая включённые агенты или настроенные точки останова.

session.post(method[, params][, callback])

История
Версия Изменения
v18.0.0

Передача некорректного обратного вызова в аргумент callback теперь приводит к выбрасыванию ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v8.0.0

Добавлен в: v8.0.0

  • method <строка>
  • params <объект>
  • callback <функция>

Отправляет сообщение в бэкенд инспектора. callback будет уведомлён, когда будет получен ответ. callback — функция, принимающая два необязательных аргумента: ошибку и результат, специфичный для сообщения.

session.post('Runtime.evaluate', { expression: '2 + 2' },
             (error, { result }) => console.log(result));
// Output: { type: 'number', value: 4, description: '4' } copy

Самая последняя версия протокола V8 инспектора опубликована на Просмотрщике протокола Chrome DevTools.

Инспектор Node.js поддерживает все домены протокола Chrome DevTools, объявленные V8. Домен протокола Chrome DevTools предоставляет интерфейс для взаимодействия с одним из агентов исполнения, используемых для инспектирования состояния приложения и прослушивания событий исполнения.

Вы не можете установить reportProgress на значение true при отправке команды HeapProfiler.takeHeapSnapshot или HeapProfiler.stopTrackingHeapObjects в V8.

Пример использования

Помимо отладчика, доступны различные профилировщики V8 через протокол DevTools.

Профилировщик CPU

Вот пример использования профилировщика CPU:

const inspector = require('node:inspector');
const fs = require('node:fs');
const session = new inspector.Session();
session.connect();

session.post('Profiler.enable', () => {
  session.post('Profiler.start', () => {
    // Invoke business logic under measurement here...

    // some time later...
    session.post('Profiler.stop', (err, { profile }) => {
      // Write profile to disk, upload, etc.
      if (!err) {
        fs.writeFileSync('./profile.cpuprofile', JSON.stringify(profile));
      }
    });
  });
}); copy

Профилировщик памяти

Вот пример использования профилировщика памяти:

const inspector = require('node:inspector');
const fs = require('node:fs');
const session = new inspector.Session();

const fd = fs.openSync('profile.heapsnapshot', 'w');

session.connect();

session.on('HeapProfiler.addHeapSnapshotChunk', (m) => {
  fs.writeSync(fd, m.params.chunk);
});

session.post('HeapProfiler.takeHeapSnapshot', null, (err, r) => {
  console.log('HeapProfiler.takeHeapSnapshot done:', err, r);
  session.disconnect();
  fs.closeSync(fd);
}); copy

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v18.x/docs/api/inspector.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API