使用 VSCode 远程调试 Node.js
通常在 VSCode 中调试 Node.js 只需要按下 F5
或是使用调试面板。这种方式对于调试本地代码非常方便,特别是对于脚本类的调试。不过实际工作中,开发代码往往部署在服务器上,如果想在本地调试的话就意味着本地也需要一套相同的环境。为了避免这种情况,就需要用到远程调试了。
配置 launch.json
Node.js 中包含的 Debug 模块支持远程调试。我们需要做的就是在 VSCode 中做好对应的配置就行。
VSCode 关于代码调试的配置都通过 launch.json
文件管理。我们可以通过 cmd + shift + p
输入 launch.json
打开配置,也可以通过调试面板上的设置按钮打开。
VSCode 会自动提示 launch.json
中 的对应属性以及可选值,所以不用太担心配置。对于远程调试我们需要关注这些属性。
1 |
|
远程调试
配置完成后就可以进行远程调试了,这里以我对远程服务器调试为例。在启动服务前,需要添加 --inspect
参数来开启 node 服务。
首先我们先启动服务器上的脚本,注意别忘记添加 --inspect
参数。这个脚本会每隔一秒打印 log 信息。
1 |
|
同时在 launch.json
中添加服务器的配置。
配置好之后,我们在 VSCode 中对代码打上断点并开启调试。
在连接上远程服务器之后,VSCode 的控制台中也会同步输出 log 信息,并且会停在断点位置。此时服务器的 log 也会同时停止。这样便完成了本地与服务器上代码的同步调试。
没开 debug 模式?
上面的例子里,是我们可以对服务器为所欲为的情况。但实际工作中,可能并不允许我们去重启服务。这时我们就需要传入 SIGNAL 来控制 node 开启 debug 服务了。官方允许我们传入 SIGUSR1
这一信号来开启 debug 模式。
在传入信号前,我们需要找到 node 服务的进程。
1 |
|
通过上面的命令,我们可以找到 node 服务所在的进程,然后再通过 kill -s
命令把信号传过去。以我服务器为例。
1 |
|
可以看到在服务端的 log 中多了一段端 debug 模式开启的信息。
端口限制?
在做完上面一步之后其实还并不能进行远程调试。原因是通过 SIGUSR1
开启的 debug 模式的 ip 为 127.0.0.1
即外网无法访问(所以在上面我们使用的是 0.0.0.0)。
这是就需要使用到端口转发了。通过 ssh
命令将服务器的端口转发到本地之后,就同样可以进行远程调试了。关于端口转发可以参考阮一峰老师的文章。
1 |
|