Spec-Zone.ru › Node.js 10 LTS

Инспектор

Устойчивость: 1 - Экспериментальная

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

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

const inspector = require('inspector');

inspector.close()

Деактивирует инспектор. Блокирует, пока не будет закрыто активных подключений.

inspector.console

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

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

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

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

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

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

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

inspector.url()

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

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

Класс: inspector.Session

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

Конструктор: new inspector.Session()

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

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

inspector.Session является EventEmitter с следующими событиями:

Событие: 'inspectorNotification'

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

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

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

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

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

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

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

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

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

session.connect()[src]

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

Подключает сессию к бэкенду инспектора. Будет выброшено исключение, если уже установлена подключенная сессия, либо через API, либо с помощью фронтенда, подключенного к порту WebSocket инспектора.

session.disconnect()[src]

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

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

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

Добавлен в: 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' }

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

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

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

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

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

Вот пример, демонстрирующий использование профилировщика CPU:

const inspector = require('inspector');
const fs = require('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));
      }
    });
  });
});

Профилировщик кучи

Вот пример, демонстрирующий использование профилировщика кучи:

const inspector = require('inspector');
const fs = require('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('Runtime.takeHeapSnapshot done:', err, r);
  session.disconnect();
  fs.closeSync(fd);
});

© 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-v10.x/docs/api/inspector.html

Spec-Zone.ru

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