使用Chrome DevTools单步调试node程序

xiaoxiao2021-02-28  28

安装最新的Node

要支持这项功能,需要node.js的版本在6.3.0以上。如果版本较低,将会提示不支持该功能。在Mac上你可以使用nvm来切换node的版本,具体请自行google。

运行node程序()

运行node程序时需要带上--inspect标记。比如可以这样运行:

node --inspect index.js

如果需要在node程序的第一行就自动加断点,可以这样来执行:

node --inspect --inspect-brk index.js

打开调试连接

本人node 版本8.11,执行之后就显示如下:

文件所在目录 > node --inspect --inspect-brk index.js Debugger listening on ws://127.0.0.1:9229/e6965a0f-810d-48b3-a6e9-0ede62299cf4 For help see https://nodejs.org/en/docs/inspector 将webSocket URL复制到浏览器,然后F12打开开发者模式,点击绿色node.js图标打开DevTool工具即可进行调试

原理

开启检查器

注意: --inspect 选项和检查器协议都是实验性的, 它们将来可能会被更改.

如果运行程序时开启了 inspect 开关, Node.js进程会通过WebSocket监听那些由 检查器协议 定义的诊断命令, 默认情况下地址和端口是127.0.0.1:9229. 每个进程会被分配一个唯一的UUID(即通用唯一识别码, 此处的UUID形如: 0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e).

检查器客户端必须知道并指定地址, 端口和UUID以连接到WebSocket接口. 完整URL为 ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e, 当然, 实际的URL要取决于实际的地址, 端口和UUID.

检查器带有一个HTTP终端用于处理被调试程序的元数据, 包括WebSocket URL, UUID和Chrome DevTools URL(Chrome DevTools指Chrome浏览器的开发者工具, 因为是个专有名词, 就不单独翻译了). 想获取到元数据, 要先发送一个HTTP请求到 http://[host:port]/json/list, 会获取到一个形式如下的JSON对象; 然后用 webSocketDebuggerUrl 字段值作为URL直接连接检查器.

{ "description": "node.js instance", "devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true& ws=127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e", "faviconUrl": "https://nodejs.org/static/favicon.ico", "id": "0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e", "title": "node", "type": "node", "url": "file://", "webSocketDebuggerUrl": "ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e" }

对于一个在启动时没有使用 --inspect 的Node.js进程, 我们可以向它发送 SIGUSR1 信号使它开始监听调试信息(在Linux和OS X上可以这么做). 这种发送信号的方式, 在Node 7中会激活遗留的调试器API; 在Node 8及以后版本中会激活检查器API.

转载请注明原文地址: https://www.6miu.com/read-2150197.html

最新回复(0)