- 断言测试
- 异步上下文跟踪
- 异步钩子
- 缓冲(Buffer)
- C++ 插件
- 使用 Node-API 的 C/C++ 插件
- C++ 嵌入 Node环境
- 子进程(Child processes)
- 集群(Cluster)
- 命令行选项
- 控制台(Console)
- 核心包(Corepack)
- 加密(Crypto)
- 调试器(Debugger)
- 已弃用的 API
- 诊断通道(Diagnostics Channel)
- 域名系统(DNS)
- 域(Domain)
- 错误(Errors)
- 事件(Events)
- 文件系统(File system)
- 全局变量(Globals)
- HTTP
- HTTP/2
- HTTPS
- 检查器(Inspector)
- 国际化
- 模块:CommonJS 模块
- 模块:ECMAScript 模块
- 模块:
node:module
API - 模块:packages 模块
- 网络(Net)
- 系统(OS)
- 路径(Path)
- 性能挂钩(Performance hooks)
- 性能挂钩(Permissions)
- 进程(Process)
- Punycode 国际化域名编码
- 查询字符串(Query strings)
- 命令行库(Readline)
- REPL 交互式编程环境
- 诊断报告
- 单个可执行应用程序
- Stream 流
- 字符串解码器
- 单元测试
- 定时器(Timers)
- 传输层安全/SSL
- 跟踪事件
- TTY
- UDP/数据报
- URL
- 实用程序
- V8
- 虚拟机
- WebAssembly
- Web加密 API(Web Crypto API)
- 网络流 API(Web Streams API)
- 工作线程(Worker threads)
- zlib
Node.js v18.18.2 文档
- Node.js v18.18.2
- ► 目录
-
►
索引
- 断言测试
- 异步上下文跟踪
- 异步钩子
- 缓冲(Buffer)
- C++ 插件
- 使用 Node-API 的 C/C++ 插件
- C++ 嵌入 Node环境
- 子进程(Child processes)
- 集群(Cluster)
- 命令行选项
- 控制台(Console)
- 核心包(Corepack)
- 加密(Crypto)
- 调试器(Debugger)
- 已弃用的 API
- 诊断通道(Diagnostics Channel)
- 域名系统(DNS)
- 域(Domain)
- 错误(Errors)
- 事件(Events)
- 文件系统(File system)
- 全局变量(Globals)
- HTTP
- HTTP/2
- HTTPS
- 检查器(Inspector)
- 国际化
- 模块:CommonJS 模块
- 模块:ECMAScript 模块
- 模块:
node:module
API - 模块:packages 模块
- 网络(Net)
- 系统(OS)
- 路径(Path)
- 性能挂钩(Performance hooks)
- 性能挂钩(Permissions)
- 进程(Process)
- Punycode 国际化域名编码
- 查询字符串(Query strings)
- 命令行库(Readline)
- REPL 交互式编程环境
- 诊断报告
- 单个可执行应用程序
- Stream 流
- 字符串解码器
- 单元测试
- 定时器(Timers)
- 传输层安全/SSL
- 跟踪事件
- TTY
- UDP/数据报
- URL
- 实用程序
- V8
- 虚拟机
- WebAssembly
- Web加密 API(Web Crypto API)
- 网络流 API(Web Streams API)
- 工作线程(Worker threads)
- zlib
- ► 其他版本
- ► 选项
目录
检查器#
源代码: lib/inspector.js
node:inspector
模块提供了用于与 V8 检查器交互的 API。
可以使用以下方式访问它:
const inspector = require('node:inspector');
inspector.close()
#
停用检查员。阻塞直到没有事件连接。
当使用Session
时,控制台 API 输出的对象不会被释放,除非我们手动执行Runtime.DiscardConsoleEntries
命令。
inspector.console
#
- <Object>用于向远程检查器控制台发送消息的对象。
require('node:inspector').console.log('a message');
检查器控制台不具有与 Node.js 控制台相同的 API。
inspector.open([port[, host[, wait]]])
#
port
<number>用于侦听检查器连接的端口。选修的。 默认值: CLI 上指定的内容。host
<string>用于侦听检查器连接的主机。选修的。 默认值: CLI 上指定的内容。wait
<boolean>阻止,直到客户端连接。选修的。 默认值:false
。
激活主机和端口上的检查器。相当于
node --inspect=[[host:]port]
,但可以在节点启动后以编程方式完成。
如果 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
inspector.waitForDebugger()
#
阻塞,直到客户端(现有的或稍后连接的)发送了
Runtime.runIfWaitingForDebugger
命令。
如果没有事件的检查器,则会抛出异常。
类:inspector.Session
#
inspector.Session
用于将消息分派到 V8 检查器后端并接收消息响应和通知。
new inspector.Session()
#
创建inspector.Session
类的新实例。检查器会话需要通过session.connect()
连接,然后才能将消息分派到检查器后端。
当使用Session
时,控制台 API 输出的对象不会被释放,除非我们手动执行Runtime.DiscardConsoleEntries
命令。
事件:'inspectorNotification'
#
- <Object>通知消息对象
当收到来自 V8 Inspector 的任何通知时发出。
session.on('inspectorNotification', (message) => console.log(message.method));
// Debugger.paused
// Debugger.resumed
也可以仅使用特定方法订阅通知:
事件:<inspector-protocol-method>
;#
- <Object>通知消息对象
当收到方法字段设置为<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()
#
将会话连接到检查器后端。
session.connectToMainThread()
#
将会话连接到主线程检查器后端。如果未在 Worker 线程上调用此 API,则会抛出异常。
session.disconnect()
#
立即关闭会话。所有挂起的消息回调将被调用并出现错误。需要调用session.connect()
才能再次发送消息。重新连接的会话将丢失所有检查器状态,例如启用的代理或配置的断点。
session.post(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 Protocol Viewer上。
Node.js 检查器支持 V8 声明的所有 Chrome DevTools 协议域。Chrome DevTools 协议域提供了一个接口,用于与用于检查应用程序状态并侦听运行时事件的运行时代理之一进行交互。
向 V8发送
HeapProfiler.takeHeapSnapshot
或HeapProfiler.stopTrackingHeapObjects
命令时,不能将 reportProgress
设置为 true
。
用法示例#
除了调试器之外,还可以通过 DevTools 协议使用各种 V8 Profiler。
CPU分析器#
以下示例展示了如何使用CPU Profiler:
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));
}
});
});
});
堆分析器#
下面的示例展示了如何使用堆分析器:
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);
});