记录下使用VSCode 调试Node.js应用相关的内容, 包括Node debugger相关的Source maps, remote debug等。
VSCode 的Debugging介绍
VSCode 的主要特征之一就是其强大的调试支持功能。
Node.js Inspect 介绍
有许多的工具和类库可以用来帮助调试Node.js应用。下面列出了一些。
如果不使用工具可以在命令行中添加–inspect标识,然后通过输入的URL连接调试。
对于没有使用–inspect启动的Node.js应用,可以传递SIGUSR1信令来激活调试,和打印出连接URL。
Inspect Tools & Clients
https://nodejs.org/en/docs/inspector/
node-inspect
使用VSCode 调试Node.js 应用
https://code.visualstudio.com/docs/nodejs/nodejs-debugging
VSCode 编辑器内置支持Node.js运行时调试支持,可以调试JavaScript、TypeScript和很多其它可以编译成JavaScript的编程语言。使用VS Code 提供的默认配置和代码片段可以非常简单的设置好Node.js的调试工程。Node.js调试文档提供了更多的关于node.js调试场景的介绍。 你可以找到Source Map, Stepping over external code, 和远程调试等更多调试相关的内容。
由于VSCode Node.js调试器与Node.js运行时通过wire protocol通信,支持的运行时集合由所有支持wire protocol的运行时确定。
当前存在两种wire protocol.
- legacy: 原生的V8 Debugger Protocol
- inspector: 新的V8 Inspector Protocol 可以使用–inspect开启. 解决原生V8 debugger protocol 大多数的限制和可扩展性问题。
当前运行时对协议的支持情况如下。
Runtime | ‘Legacy’ Protocol | ‘Inspector’ Protocol |
---|---|---|
io.js | all | no |
node.js | < 8.x | >= 6.3(windows: >=6.9 |
Electron | < 7.4 | >= 7.4 |
Chakra | all | not yet |
虽然,看起来VS Code Node.js 调试器可以自动选择最合适的协议, 我们还是提供了一个指定特定协议的启动配置属性。
auto: 尝试自动检测运行时使用的协议。 当版本为8.0或者更新时,使用’inspector’ 协议。 当配置中request 类型为‘attach’时, 尝试使用’inspector’协议,如果可用,则使用。由于更早的版本存在几个问题,仅仅当版本>= 6.9时,才使用’inspector’协议。
legacy: 强制node 调试器使用 ‘legacy’协议。 当node 版本 < v8.0 和Electron 版本< 7.4的时候支持。
legacy: 强制node 调试器使用 ‘inspector’协议。 当node 版本 >= 6.3时支持。 目前 Electron 不支持。
- 在左侧导航Tab选择调试,打开调试面板
- 在调试Toolbar中点击设置, 打开launch.json使其处于编辑状态
- 根据工程目录配置
使用VSCode 远程调试Node.js 应用
Kill Scripts Signal events
- 在已经运行的Node应用进程中开启调试
- 查找pid
1 | ps | grep node |
- 发送信号 启用调试
1 | kill -s SIGUSR1 nodepid |
SIGUSR1 参考
https://nodejs.org/api/process.html#process_signal_events
在VSCode调试
- 打开调试面板
- 新增调试配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${file}"
},
// 新增加远程调试节点
{
"type": "node",
"request": "launch",
"name": "Remote",
"protocol": "auto",
"address": "localhost", // 修改成对应的远程服务器地址
"port": 9229
}
]
}
- 启动调试
- 在调试toolbar中选择Remote启动方式
- 点击启动
Command Line Options
下表列出了在调时不同标识的作用。
标识 | 作用 |
---|---|
–inspect |
|
–inspect=[host:port] |
|
–inspect-brk |
|
–inspect-brk=[host:port] |
|
node inspect script.js |
|
其它
使用NIM(Node.js 调试管理工具)
- 可以自动监听本地的9229端口并自动启动Node.js调试窗口
- 参考https://chrome.google.com/webstore/detail/nodejs-v8-inspector-manag/gnhhdgbaldcilmgcpfddgdbkhjohddkj