在本地调试远程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
手动输入路径和文件查找并调试吧!