在本地调试远程node

前言

今天发现部署在公司内网的qa服,beta服突然报错,那需要调试内网服务器的node应该怎么做呢?

我们一起 看看node的官方文档,一步步来实现在本地调试远程node

使用步骤

启用检查器

官方文档指出,我们启动项目的时候,使用命令--inspect启动我们的调试。

假设我们部署在==远程qa服==的项目入口文件是app.js,则执行命令node --inspect app.js

此时,node控制条会有如下的输出:

Debugger listening on ws://127.0.0.1:9229/15063ca7-a5e5-4394-84a4-0145013f6cef

可以看到我们的检查器帮我们在ws上启动了一个127.0.0.1:9229的监听域名和端口

如果想指定域名和端口,可以参考官网的文档:--inspect=[host:port]

启动远程调试

直接套用官方文档的话:

我们推荐你千万不要使用调试器监听公共的 IP 地址。如果你真需要允许远程调试连接,那么就请使用 SSH 代替。以下我们提供你例子仅是为解释目的。请在开始前理解允许远程访问特权的安全风险。

意思是我们不能直接监听内网的ip+端口,而应该通过ssh重定向到本地。

执行ssh -L 9221:localhost:9229 user@remote.example.com并输入远程服务器 ssh密码就创建了一个ssh管道

以上脚本的含义是:在你机器上连接到 9221 端口将被重定向到 9229 的 remote.example.com 地址上

9229是第一步node帮我们启动的ws监听端口,9221是我们指定的要重定向到本地的端口

验证一下:

执行lsof -i tcp:9221 能看到ssh在监听我们的9221端口

以上步骤完成后,就可以添加调试器开始调试了

添加调试器

打开chrome,在地址栏输入:chrome://inspect,在Remote Target里面应该可以看到我们远程的node进程了。或者直接打开远程的node项目地址,打开chrome开发者工具,应该也能看到我们的node程序。

验证一下:执行lsof -i tcp:9221 能看到ssh和chrome都在监听我们的9221端口

开始调试

第一次调试的时候,你会发现一个在sources目录的Filesystem竟然是空的! 没关系,执行command + p 手动输入路径和文件查找并调试吧!