Инспектор
Модуль 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()
Создает новый экземпляр класса inspector.Session. Для отправки сообщений в бэкенд инспектора сессия инспектора должна быть подключена через session.connect().
inspector.Session является EventEmitter с следующими событиями:
Событие: 'inspectorNotification'
- <Объект> Объект сообщения уведомления
Срабатывает при получении любого уведомления от V8 Инспектора.
session.on('inspectorNotification', (message) => console.log(message.method));
// Debugger.paused
// Debugger.resumed
Также возможно подписаться только на уведомления с определенным методом:
Событие: <inspector-protocol-method>
- <Объект> Объект сообщения уведомления
Срабатывает при получении уведомления инспектора, у которого поле 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]
Подключает сессию к бэкенду инспектора. Будет выброшено исключение, если уже установлена подключенная сессия, либо через API, либо с помощью фронтенда, подключенного к порту WebSocket инспектора.
session.disconnect()[src]
Немедленно закрывает сессию. Все ожидающие обратные вызовы сообщений будут вызваны с ошибкой. session.connect() необходимо вызвать, чтобы снова отправлять сообщения. Переподключенная сессия потеряет все данные инспектора, такие как включенные агенты или настроенные точки останова.
session.post(method[, params][, callback])[src]
Отправляет сообщение в бэкенд инспектора. 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