ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Node Inspector 完全指南:基于 Blink DevTools 的 Node.js 可视化调试器

Node Inspector 完全指南:基于 Blink DevTools 的 Node.js 可视化调试器 开发工具【免费下载链接】node-inspectorNode.js debugger based on Blink Developer Tools项目地址https://gitcode.com/gh_mirrors/no/node-inspector点击查看免费下载Node Inspector 是一个面向 Node.js 应用、以 Blink Developer Tools前身 WebKit Web Inspector为前端的调试器接口支持断点、单步、作用域与变量检视、CPU/堆内存剖析、网络请求检查与控制台输出等能力。本文以仓库根目录的 README.md 为骨架结合 lib/config.js、bin/node-debug.js、bin/inspector.js、lib/debug-server.js 等源码实现系统讲解安装启动、功能特性、工作原理、高级用法、故障排查与完整配置帮助你直接用它调试真实项目并理解其底层通信机制。项目定位与背景Node Inspector 的定位是Node.js 应用的调试器界面底层复用 Chrome DevTools 的前端工程仓库内 front-end 目录即 DevTools 前端代码front-end-node 目录存放针对 Node 的覆盖与定制通过 WebSocket 把浏览器 UI 与运行中的 Node 进程桥接起来。需要特别说明版本背景从 Node.js 6.3 开始Node 官方内置了基于 DevTools 的调试器并在很大程度上取代了 Node Inspector。内置调试器由 V8/Chromium 团队直接维护提供了一些在 Node Inspector 中难以实现的进阶能力如长/异步堆栈跟踪。因此本文内容对应的是仓库当前版本package.json 中版本号为 1.1.2声明engines.node 0.8.0所描述的经典方案适用于旧版 Node 环境或需要理解该工具内部机制的场景。快速开始三步跑通调试1. 全局安装$ npm install -g node-inspector安装后提供两个可执行命令见 package.json 的bin字段node-inspector启动调试器 Web 服务对应 bin/inspector.jsnode-debug一站式启动调试器服务、以调试模式拉起目标脚本并打开浏览器对应 bin/node-debug.js。2. 启动调试$ node-debug app.js其中app.js是你的 Node 主程序入口文件名。node-debug会自动完成三件事fork 一个node-inspector子进程、以--debug-brk5858之类的参数 fork 目标脚本由 bin/node-debug.js 的createConfig拼接测试见 test/node-debug.test.js、最后尝试打开浏览器。3. 开始调试node-debug会默认在浏览器中加载调试界面。注意Node Inspector 仅支持 Chrome 和 Opera如果你的默认浏览器是 Safari、IE 等需要手动把调试页 URL 复制到 Chrome/Opera 中打开。进入调试页后其交互方式与 Chrome DevTools 基本一致核心操作包括在源码中导航、设置断点可带触发条件、单步执行step over / step in / step out与继续resume、检视作用域/变量/对象属性、鼠标悬停表达式显示值、编辑变量与对象属性、continue to location、异常时中断、批量启用/禁用断点等。功能特性总览Node Inspector 支持 DevTools 调试器的大部分能力源自 README.md Features 一节源码文件导航设置断点可指定触发条件step over / step in / step out / resume继续执行检视作用域、变量、对象属性鼠标悬停在源码表达式上以 tooltip 显示其值编辑变量与对象属性Continue to location异常时中断break on exceptions启用/禁用全部断点CPU 与 HEAP 剖析profiling网络客户端请求检查控制台输出检查亮点能力Cool stuff基于 WebSocket 通信调试事件采用 WebSocket 推送无需轮询断点远程调试支持调试远程机器也支持从远程机器连回本地 Node Inspector见下文远程调试运行时热编辑Live Edit可在运行中修改代码并可选地把修改持久化回文件系统未加载文件也可设断点可以在尚未被 V8 加载的文件中设置断点这对调试模块加载/初始化过程非常有用可嵌入第三方应用详见 docs/embedding.md 的 Embedding HOWTO。工作原理从浏览器到 V8 的通信链路从源码结构看一次调试会话的链路大致为浏览器打开http://127.0.0.1:8080/?port5858加载 front-end 中的 DevTools 前端页面前端通过 WebSocket 连上调试服务lib/debug-server.js 中的DebugServer在收到connection事件后为每个连接创建 SessionSession内部组装多个协作组件DebuggerClientV8 调试协议客户端、ScriptManager脚本管理、BreakEventHandler断点事件、FrontendClient/FrontendCommandHandler前端消息转发与命令处理、ConsoleClient、HeapProfilerClient、InjectorClient等DebuggerClient通过 lib/debugger.js 建立到debugPort的 TCP 连接按 V8 Debug 协议收发Content-Length分帧的 JSON 消息request/response/event三种类型断点、异常事件会触发event事件向上传递与此同时Session每秒向 WebSocket 发送一次 ping 心跳见 lib/session.js维持连接活性。DebugServer还对外提供 DevTools 兼容的握手端点/json、/json/list、/json/version返回 Node 版本与协议版本等元信息以及/inspector.json、/protocol.json等动态生成的协议描述文件见 lib/debug-server.js。index.js暴露的buildInspectorUrl/buildWebSocketUrl两个公共 API 用于生成调试页与 WebSocket 端点 URL这也是外部嵌入的基础。高级使用手动拆分三步调试流程node-debug是开箱即用的快捷方式但当需要定制默认设置时可以拆成三步手动完成第 1 步启动 Node Inspector 服务$ node-inspector服务可以常驻后台同一个服务实例支持调试多个进程。如果 8080 端口被占用服务会给出EADDRINUSE提示并建议改用--web-port指定其他端口见 bin/inspector.js 的错误处理。第 2 步让目标 Node 进程进入调试模式方式一启动时加调试标志不暂停首行$ node --debug your/node/program.js方式二启动即暂停在首行$ node --debug-brk your/short/node/script.js方式三对已经在运行的进程动态开启调试——向进程发送 USR1 信号$ pgrep -l node 2345 node your/node/server.js $ kill -s USR1 2345Windows 特殊处理Windows 不支持 UNIX 信号可调用未公开 APIprocess._debugProcess(pid)先用任务管理器方式确认 PID例如 tasklist /FI IMAGENAME eq node.exe Image Name PID Session Name Session# Mem Usage node.exe 3084 Console 1 11,964 K调用 API node -e process._debugProcess(3084)第 3 步打开调试界面在 Chrome 中访问http://127.0.0.1:8080/?port5858即可port需与目标进程的调试端口一致默认 5858。故障排查实战脚本执行太快来不及附加调试器被调试进程必须以--debug-brk启动这样脚本会暂停在第一行。node-debug默认已加上该选项手动启动时请自行添加。界面状态错乱直接刷新浏览器页面即可恢复。可以远程调试吗可以。Node Inspector 必须运行在被调试机器上而浏览器可以放在任何地方只要确保 8080 端口可达即可。如果 Node Inspector 不在远程机器上也可以由本地机器反向连接远程但此时必须用--no-inject启动会缺失 profiling、console 输出检查等注入类功能。两种远程调试方式方式一远程机器上启动并指定调试目标主机$ node-inspector --debug-host 192.168.0.2 --no-inject然后打开http://127.0.0.1:8080/debug?port5858。方式二把远程机器地址作为 host 参数拼进 URL$ node-inspector --no-inject然后打开形如http://127.0.0.1:8080/debug?host192.168.123.12port5858的地址。从实现看DebugServer._getDebuggerHost会从 URL 中解析host参数缺省时回退到配置的debug-host默认127.0.0.1见 lib/debug-server.js 与 lib/config.js。如何指定要隐藏的文件传入 JSON 编码的数组即可命令行下引号需要转义$ node-inspector --hidden[node_modules/framework]注意数组元素按正则表达式解释。新版还支持多次传参写法旧版 JSON 数组风格会在 lib/config.js 中给出弃用警告并自动兼容且隐藏规则会统一转成正则、忽略大小写$ node-inspector --hidden node_modules/ --hidden \.test\.js$ app界面加载不出或失效刷新也没用检查并禁用 Adblock 及其他一切内容拦截脚本和插件。如何选择性删除调试会话元数据当 watch 变量中出现函数调用可能触及特殊 C 绑定导致 Node Inspector 进入异常状态、甚至重启应用也无效时可以清理会话元数据——它存储在浏览器 HTML5 localStorage 中。在 Chrome 的 JavaScript 控制台执行// 全部清除 window.localStorage.clear() // 列出所有 key便于用 removeItem() 选择性删除 window.localStorage // 删除所有 watch 表达式 window.localStorage.removeItem(watchExpressions) // 删除所有断点 window.localStorage.removeItem(breakpoints)清理完成后刷新浏览器即可。Node Inspector 启动很慢尝试设置--no-preload。该选项会禁用启动时对磁盘*.js文件的预扫描代码会在模块被 require 时按需加载进 Node Inspector从而显著加速启动。如何调试 Mocha 单元测试把_mocha作为被调试进程启动并确保执行暂停在首行这样可以在测试运行前有足够时间设置断点$ node-debug _mocha如何调试 Gulp 任务Unix 系统下直接使用$(which ..)展开 gulp-cli 的完整路径$ node-debug $(which gulp) taskWindows 下需要先取得gulp.js的完整路径 node-debug %appdata%\npm\node_modules\gulp\bin\gulp.js task省略task部分会执行default任务。配置指南node-inspector与node-debug都通过 rc 模块管理配置lib/config.js 中rc(node-inspector, defaults, parsedArgv)即配置合并入口命令行参数由 yargs 解析。所有被找到的配置来源会扁平化合并成一个对象列表中靠前的来源优先级更高覆盖后面的。配置来源与优先级命令行参数由 yargs 解析以node-inspector_为前缀的环境变量若传入--config file选项则来自该文件本地.node-inspectorrc按./ ../ ../.. ../../../逐级向上查找第一个找到的$HOME/.node-inspectorrc$HOME/.node-inspector/config$HOME/.config/node-inspector$HOME/.config/node-inspector/config/etc/node-inspectorrc/etc/node-inspector/config全部选项说明下表完整继承自 README.md并补充了 lib/config.js 中定义、README 表格未列出的debug-host、plugins、plugin-path三项选项别名默认值说明通用general--help-h显示可用选项信息。--help -l显示完整用法--help option显示某选项的快速帮助--version-v显示 Node Inspector 版本--debug-port-d5858Node/V8 调试器端口对应node --debug{port}--web-host0.0.0.0Node Inspector Web 界面监听的 Host。node-debug默认监听127.0.0.1--web-port-p8080Node Inspector Web 界面监听的端口--debug-host127.0.0.1被调试 Node/V8 进程所在的主机源码 lib/config.js 补充node-debug 专用--debug-brk-btrue是否在第一行暂停对应node --debug-brknode-debug模式默认开启--nodejs[]透传给被调试进程的 NodeJS 选项node --option{value}--script[]透传给被调试进程的选项node app --option{value}--cli-cfalseCLI 模式不打开浏览器node-inspector 专用--save-live-editfalse将 Live Edit 修改保存到磁盘更新被编辑的文件--preloadtrue是否预加载*.js文件可关闭以加快启动--injecttrue是否向被调试进程注入调试扩展可用子键部分禁用如--no-inject.network允许的子键network、profiles、console--hidden[]要从 UI 中隐藏的文件数组这些文件中的断点会被忽略所有路径按正则解释--stack-trace-limit50断点处显示的栈帧数量--ssl-key包含有效 SSL 私钥的文件路径--ssl-cert包含有效 SSL 证书的文件路径--pluginsfalse是否启用插件系统源码补充--plugin-path加载 node-inspector 插件的路径仅在--plugins为 true 时生效源码补充补充说明--inject子键用法源码 lib/config.js 中--no-inject.network示例对应禁用网络注入--nodejs可重复传入多个值node-debug会按序拼进子进程的execArgs见 test/node-debug.test.js 中--nodejs --harmony --nodejs --random_seed2的断言。命令行使用示例命令格式$ node-debug [general-options] [node-debug-options] [node-inspector-options] [script] $ node-inspector [general-options] [node-inspector-options]常用示例全部来自 README.md# 显示完整用法信息 $ node-debug --help -l # 将被调试进程的调试端口设为 5859 $ node-debug -p 5859 app # 让 node-inspector 监听在 127.0.0.2 $ node-debug --web-host 127.0.0.2 app # 向被调试进程传递 --optionvalue $ node-debug app --option value # 以 HTTPS 启动调试界面 $ node-debug --ssl-key ./ssl/key.pem --ssl-cert ./ssl/cert.pem app # 忽略 node_modules 目录与所有 .test.js 文件中的断点 $ node-debug --hidden node_modules/ --hidden \.test\.js$ app # 给运行被调试脚本的 node 进程加 --harmony 标志 $ node-debug --nodejs --harmony app # 禁用 .js 文件预加载 $ node-debug --no-preload app注意node-debug app.js -b -p 10 -d 20 -c carg rest这类写法脚本之后的参数会原样透传给被调试应用源码 bin/node-debug.js 在遇到script后重新解析参数测试 test/node-debug.test.js 有对应断言。RC 配置文件示例RC 文件中使用短横线dashed选项名。将下面的内容保存为.node-inspectorrc即可生效{ web-port: 8088, web-host: 0.0.0.0, debug-port: 5858, save-live-edit: true, preload: false, hidden: [\.test\.js$, node_modules/], nodejs: [--harmony], stack-trace-limit: 50, ssl-key: ./ssl/key.pem, ssl-cert: ./ssl/cert.pem }配置中的相对路径如ssl-key会在 lib/config.js 的normalizeOptions阶段被解析为真实绝对路径且会校验文件存在性。嵌入第三方应用Node Inspector 提供了两种嵌入方式完整说明见 docs/embedding.md方式一在新的 Node 进程中运行。使用child_process.fork启动node-inspector/bin/inspector并监听其message事件通过msg.event判断事件类型var fork require(child_process).fork; var inspectorArgs []; var forkOptions { silent: true }; var inspector fork( require.resolve(node-inspector/bin/inspector), inspectorArgs, forkOptions ); inspector.on(message, handleInspectorMessage); function handleInspectorMessage(msg) { switch(msg.event) { case SERVER.LISTENING: console.log(Visit %s to start debugging., msg.address.url); break; case SERVER.ERROR: console.log(Cannot start the server: %s., msg.error.code); break; } }SERVER.LISTENINGHTTP 服务已绑定、可以接受连接时触发属性address为DebugServer.address()的返回值SERVER.ERRORHTTP 服务建立出错时触发属性error为错误对象。这两种事件正是 bin/inspector.js 通过process.send通知父进程的消息node-debug本身也依赖这套协议完成握手见 bin/node-debug.js 的startInspectorProcess。方式二在现有进程中运行。文档注明此方式待完成index.js应暴露创建并启动DebugServer实例的方法同时DebugServer已经暴露了以下 APIdebugServer.address()返回server.address()的结果并附加上浏览器中要打开的 Node Inspector 页面 URL形如{ port: 8080, address: 0.0.0.0, url: http://localhost:8080/debug?port5858 }事件listeningHTTP 服务绑定成功、可接受连接时触发事件error附带 Error 对象HTTP 服务建立出错时触发。对外可用的还有 index.js 导出的buildInspectorUrl/buildWebSocketUrl两个纯函数分别用于生成调试页 URL 与 WebSocket 端点 URL二者都支持0.0.0.0主机到127.0.0.1的自动归一化且当端口为非数字时按 UNIX socket 处理buildInspectorUrl会返回unix:协议 URL。已知问题与使用限制以下限制来自 README.md Known Issues 一节使用前应有所预期Buffer 对象内容展示需谨慎Buffer 的每个字节会被渲染成独立的数组元素对大多数 Buffer 来说渲染耗时过长非断点暂停状态下 Console 行为可能不符合直觉关联 issue #146未捕获异常的断点并非在所有 Node 版本都生效至少需要 v0.11.3 以上多进程调试如 cluster比较麻烦需要额外的操作步骤。此外还需牢记两个适用前提Node Inspector 只支持 Chrome/Opera 浏览器且从 Node.js 6.3 起官方已提供内置 DevTools 调试器本工具的经典用法更适合旧版 Node 环境或作为理解 DevTools 调试协议与嵌入方案的参考实现。深入阅读指引README.md本文的权威来源含 Quick Start、Features、Troubleshooting、Advanced Use、Configuration 全部内容docs/embedding.md嵌入第三方应用的完整 HOWTOlib/config.js全部选项定义、别名、默认值及配置合并/校验逻辑bin/node-debug.js 与 bin/inspector.js两个 CLI 入口的实现lib/debug-server.jsHTTP WebSocket 服务、DevTools 握手端点与 Session 创建lib/debugger.js 与 lib/DebuggerClient.jsV8 Debug 协议 TCP 连接与消息分发test/node-debug.test.js 与 test/config.js参数解析与配置合并的行为化测试可作为理解选项语义的补充证据。赞分享开发工具【免费下载链接】node-inspectorNode.js debugger based on Blink Developer Tools项目地址https://gitcode.com/gh_mirrors/no/node-inspector点击查看免费下载相关推荐Node Inspector终极Node.js调试利器完全指南Node Inspector终极Node.js调试利器完全指南 Node Inspector是一款基于Blink开发者工具的Node.js调试器为开发者提供开发工具Node.js调试器Node Inspector全景解析基于Chrome开发者工具的经典调试利器Node.js调试器Node Inspector全景解析基于Chrome开发者工具的经典调试利器 Node Inspector 是一款基于 Chrome 开发开发工具ndb基于Chrome DevTools的Node.js调试神器ndb基于Chrome DevTools的Node.js调试神器 ndb是由Google Chrome Labs团队开发的Node.js调试工具它深度集成了开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表