将WebStorm连接到远程node.js调试会话

将WebStorm连接到远程node.js调试会话,node.js,debugging,vagrant,webstorm,Node.js,Debugging,Vagrant,Webstorm,我正在Oracle VirtualBox的Linux虚拟机中运行Node.js应用程序。VM上的端口5858被转发到本地主机上的端口5858 我在主机操作系统(Windows7)上运行WebStorm。在WebStorm中,我单击Run>>编辑配置…I然后单击添加按钮(加号)并选择Node.js远程调试。然后,我输入配置的名称,将主机保留为127.0.0.1,将端口保留为5858。我单击OK,并确保我的节点应用程序在带有--debug标志的VM上运行 然后单击WebStorm工具栏中的bug图标

我正在Oracle VirtualBox的Linux虚拟机中运行Node.js应用程序。VM上的端口
5858
被转发到本地主机上的端口
5858

我在主机操作系统(Windows7)上运行WebStorm。在WebStorm中,我单击
Run>>编辑配置…
I然后单击添加按钮(加号)并选择
Node.js远程调试
。然后,我输入配置的名称,将主机保留为
127.0.0.1
,将端口保留为
5858
。我单击
OK
,并确保我的节点应用程序在带有
--debug
标志的VM上运行

然后单击WebStorm工具栏中的bug图标,调试器出现在WebStorm IDE的底部

如何确认连接成功?断点不起作用,WebStorm中的控制台保持为空(同时信息被发送到Linux虚拟机上的控制台)。有人能建议要使远程调试会话正常工作还需要做些什么吗?

1)来自WebStorm手册:

当要调试的应用程序在物理远程主机上运行时,您需要运行代理或任何其他软件,以确保Node.js服务器上的端口转发。这是必需的,因为调试端口只能在本地主机网络接口上打开。无法从另一台计算机访问localhost网络接口,因此WebStorm无法在启动调试会话时连接到该接口

2) VM上的localhost与主机上的localhost不同(听起来很奇怪)

3) V8调试器正在本地主机上侦听

解决方案:

您可以将ssh代理安装到linux虚拟机:
ssh-L 5858:127.0.0.1:5858@-N
,在这里您可以找到如何在Windows上执行此操作的答案-> 如果执行上述操作,WebStorm中的调试配置将为主机:127.0.0.1端口:5858

您可以通过检查“调试器”选项卡和“变量”面板来检查WebStorm是否连接到远程调试会话

而不是仅仅

$ vagrant ssh
试一试

我还从我的
vagrant文件
中删除了行
config.vm.network:forwarded\u port,guest:5858,host:5858
,并执行了
$vagrant重新加载

在你的流浪盒子里跑

$ node --debug-brk path/to/file.js
设置Node.js远程调试运行/调试配置,默认设置为正常(主机127.0.0.1和端口5858)

从您的主机上运行以下命令,而不是从您的“流浪者”对话框中运行

$ telnet 127.0.0.1 5858
你应该得到这样的回答

Type: connect
V8-Version: 3.14.5.9
Protocol-Version: 1
Embedding-Host: node v0.10.28
Content-Length: 0
如果你不这样做,那么前进的港口就出了问题。您可以在主机端尝试其他端口,并将以前从端口5858设置的webstorm运行/调试配置更新为新端口

现在运行NodeJS调试配置。它应该立即拾取文件,您就可以调试它了


我的步骤基于PHPStorm,但应该是相同的。我假设只要安装了NodeJS插件,它就可以在所有基于IntelliJ的IDE上工作。

这就是我在linux Debian VM中所做的:

安装平衡器

sudo-apt-get-install-balance-y

在平衡器中创建一个路由,将5858端口重新路由到5859

余额5859 127.0.0.1:5858

启动你的应用程序

节点——调试app.js


现在,您可以从端口5859上的虚拟机外部访问它,只需提醒一下,当我尝试此操作时,我必须使用
--debug brk
。使用just
--debug运行时不允许WebStorm在连接后设置断点。

vagrant文件中有一行用于创建VM
config.VM.network:forwarded\u port,guest:5858,host:5858
这应该可以实现吗?WebStorm当前保持在调试器变量面板中连接到127.0.0.:5858的
上。vagrant不允许转发绑定到lo的端口。它可以转发的服务正在使用0.0.0.0请澄清您的最后评论-我不理解.Node.js作为示例-http.createServer(…).listen(5858);正在侦听0.0.0.0:5858,这意味着无论连接到您的计算机的IP是什么(loclahost,eth0 IP…),请求都会到来,节点将拾取它,但如果您让它只侦听lo-http.createServer(…)。侦听(5858,'127.0.0.1');您将无法通过外部ip地址(连接到eth0、eth1等)访问它。Vagrant无法从lo(127.0.0.1)转发端口以使它们从外部可用,默认情况下,V8调试器正在127.0.0.1上侦听。我提供的Ssh命令正在创建。。。。。。将所有流量从端口5858上的主机转发到Vagrant VM上的localhost:5858。如果有人碰巧运行带有--inspect标志的WebStorm 2017.2和nodejs,请确保首先将WebStorm更新到2017.3 EAP,该版本支持由--inspect标志强制实施的新Chromium调试协议。
Type: connect
V8-Version: 3.14.5.9
Protocol-Version: 1
Embedding-Host: node v0.10.28
Content-Length: 0