过时的调试方法
过去调试node应用,需要借助node-inspector
:
- 安装:
npm install -g node-inspector
- 启动应用:
//node-debug 命令将在默认浏览器中加载 Node Inspector。 node-debug app.js
- 使用浏览器打开node应用服务的地址,再用chrome打开第二步打印出的地址,即可进行调试。
issues
Node Inspector 目前最新的 package 版本是0.12.8,发布于10个月前。 而 Node.js 版本更新很快,v6.x 已经有十几个版本更新了。
在好几个月前,我开始使用 Node.js v6.4.0,同样的也安装了 Node Inspector 来进行 Debugging,然后就遇到了:Throwing exception on simple use case。
在好长一段时间,这个问题没有得到解决,相关讨论,PR也没有得到回应或者 Merge。直到最近,终于合并了一个 Pull Request:Fix callback call in InjectorClient._findNMInScope。然而 Node Inspector package 还没有发布 patch 更新,所以 npm install -g node-inspector
依然会遇到这个问题。
如果需要在 v6.4.0 以上版本使用 Node Inspector,可以直接从 github 下载安装 npm install -g https://github.com/node-inspector/node-inspector
,或者手动修改 InjectorClient.js。
Node.js 集成 V8 Inspector
在 Node Inspector issues里看到了很多讨论,有开发者提出了使用 node --inspect app.js
来替代 node-inspector。 原来 Node.js v6.3.0+ 已经内置支持了 V8 Inspector。
Node.js debugger docs 文档也增加了这部分内容:
⚠:这是一个实验特性。
V8 Inspector 集成允许将 Chrome 开发工具通过 Chrome Debugging Protocol连接到 Node.js 实例以进行调试和分析。
V8 Inspector 可以通过在启动 Node.js 应用程序时传递 --inspect
标志来启用。 也可以提供具有该标志的自定义端口,例如, --inspect=9222
将接受端口9222上的 DevTools 连接。
如需在应用的第一行代码添加断点,在 --inspect
之外增加 --debug-brk
标志。
$ node --inspect index.js
Debugger listening on port 9229.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2
应用启动后,打开chrome://inspect/#devices
,在config
里添加node应用监听的地址,例如上述事例中的:localhost:9229
点击Open dedicated DevTools for Node
,切换到source
标签页,即可进行调试。
参考
在 Chrome DevTools 中并行调试 Node.js 和浏览器 JavaScript
Nodejs 调试方法