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

20

我在 Oracle VirtualBox 的 Linux VM 中运行一个 Node.js 应用程序。VM 上的端口 5858 被转发到 localhost 上的端口 5858

我在宿主操作系统(Windows 7)上运行 WebStorm。在 WebStorm 中,我点击 Run >> Edit Configurations....,然后点击添加按钮(加号),选择 Node.js remote debug。我然后输入配置的名称,将主机保留为 127.0.0.1,将端口保留为 5858。我点击 OK,并确保我的 Node 应用程序在 VM 上使用 --debug 标志运行。

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

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


如果有人正在使用带有--inspect标志的WebStorm 2017.2和nodejs,请确保首先将WebStorm更新到带有新Chromium调试协议支持的2017.3 EAP版本,该协议是由--inspect标志强制执行的。 - WooDzu
4个回答

21

不只是

$ vagrant ssh

尝试

$ vagrant ssh -- -L 5858:127.0.0.1:5858

我还从我的Vagrantfile中删除了这一行:config.vm.network :forwarded_port, guest: 5858, host: 5858,并执行了$ vagrant reload命令。

在你的vagrant box中运行

$ node --debug-brk path/to/file.js

设置一个Node.js远程调试的运行/调试配置,使用默认值即可(主机为127.0.0.1,端口为5858)。

在您的主机上运行以下命令,而不是vagrant虚拟机中。

$ 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 上都会生效。


16

1) 来自WebStorm手册:

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

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

3) V8调试器正在侦听localhost。

解决方案:

你可以设置ssh代理到Linux虚拟机:ssh -L 5858:127.0.0.1:5858 <vm_user>@<vm_ip> -N,这里有一个关于如何在Windows上执行此操作的答案-> stackoverflow 如果你完成了以上步骤,那么在WebStorm中的调试配置中,主机将是:127.0.0.1,端口是:5858。

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


Vagrantж–Ү件дёӯжңүдёҖиЎҢз”ЁдәҺеҲӣе»әиҷҡжӢҹжңәзҡ„д»Јз Ғconfig.vm.network :forwarded_port, guest: 5858, host: 5858пјҢиҝҷеә”иҜҘеҸҜд»Ҙи§ЈеҶій—®йўҳдәҶеҗ§пјҹWebStormеңЁи°ғиҜ•еҷЁеҸҳйҮҸйқўжқҝдёҠд»Қ然жҳҫзӨәвҖңиҝһжҺҘеҲ°127.0.0.:5858вҖқгҖӮ - Ben Aston
1
Vagrant不允许转发绑定到lo的端口。只有当服务使用0.0.0.0时,它才能进行转发。 - Damian Krawczyk
请澄清您最后的评论 - 我不理解。 - Ben Aston
Node.js 举例 - http.createServer(...).listen(5858);正在监听 0.0.0.0:5858 ,这意味着无论你的机器连接到哪个 IP (localhost, eth0 ip ...),请求都会被 Node.js 捕捉。但如果你只让它监听 lo,http.createServer(...).listen(5858, '127.0.0.1');,就无法通过外部 IP 地址 (eth0、eth1 等) 访问它。Vagrant 无法将端口从你的 lo (127.0.0.1) 转发,以便从外部访问它,并且 V8 调试器默认正在监听 127.0.0.1 。我提供的 ssh 命令正在创建隧道... - Damian Krawczyk
将主机上端口5858的所有流量转发到Vagrant VM上的localhost:5858。 - Damian Krawczyk
据我所知,这个讨论并没有解决我的问题。我想在Webstorm中将调试器附加到在VirtualBox VM中运行的节点应用程序上。但我仍然无法做到这一点。尽管如此,由于付出了努力,我很乐意授予奖励。我知道可以成功地将VM上的端口转发到主机上(使用Vagrant进行配置),因为我已经在为端口5858(以及其他端口)这样做了。 - Ben Aston

5
这是我在我的Linux Debian VM上所做的:
安装负载均衡器
sudo apt-get install balance -y
在负载均衡器中创建一个路由,将5858端口重定向到5859端口
balance 5859 127.0.0.1:5858
启动你的应用程序
node --debug app.js
现在你可以从虚拟机外部通过5859端口访问它了。

2

提醒一下,当我尝试这个时,我必须使用--debug-brk。只运行--debug无法在连接后允许WebStorm设置断点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接