如何调试node应用?

过时的调试方法

过去调试node应用,需要借助node-inspector:

  1. 安装:npm install -g node-inspector
  2. 启动应用:
    //node-debug 命令将在默认浏览器中加载 Node Inspector。
    node-debug app.js
    
  3. 使用浏览器打开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 调试方法

你可能感兴趣的:(如何调试node应用?)