【问题标题】:Connecting WebStorm to a remote node.js debugging session将 WebStorm 连接到远程 node.js 调试会话
【发布时间】:2014-03-05 05:30: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,并确保我的节点应用程序正在使用--debug 标志的VM 上运行。

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

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

【问题讨论】:

  • 如果有人碰巧使用 --inspect 标志运行 WebStorm 2017.2 和 nodejs,请确保首先将 WebStorm 更新到 2017.3 EAP,它支持由 --inspect 标志强制执行的新 Chromium 调试协议.

标签: node.js debugging vagrant webstorm


【解决方案1】:

1) 来自 WebStorm 手册:

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

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

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

解决方案:

您可以设置 ssh 代理到 linux VM:ssh -L 5858:127.0.0.1:5858 <vm_user>@<vm_ip> -N,在这里您可以找到如何在 Windows 上执行此操作的答案 -> stackoverflow 如果您执行上述操作,您在 WebStorm 中的调试配置将是 Host: 127.0.0.1 Port: 5858

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

【讨论】:

  • 在 vagrant 文件中有一行用于创建 VM config.vm.network :forwarded_port, guest: 5858, host: 5858 这应该可以解决问题吗? WebStorm 目前仍在调试器变量面板中的Connecting to 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(...).listen(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。
【解决方案2】:

不仅仅是

$ 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)。

从您的 HOST 机器上运行以下命令,而不是您的 vagrant box。

$ 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

如果您不这样做,则端口转发有问题。您可以在主机端尝试不同的端口,并将之前设置的 webstorm 运行/调试配置从端口 5858 更新到新端口。

现在运行 NodeJS 调试配置。它应该会立即获取文件,然后您就可以对其进行调试了。

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

【讨论】:

    【解决方案3】:

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

    安装平衡器

    sudo apt-get install balance -y

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

    balance 5859 127.0.0.1:5858

    启动您的应用程序

    node --debug app.js

    现在您可以从 VM 外部的 5859 端口访问它

    【讨论】:

      【解决方案4】:

      请注意,当我尝试这个时,我不得不使用--debug-brk。仅使用 --debug 运行不允许 WebStorm 在连接后设置断点。

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 2016-01-25
        • 2019-03-01
        • 1970-01-01
        • 2019-06-29
        • 2020-07-17
        • 1970-01-01
        • 2020-06-30
        • 2014-07-31
        相关资源
        最近更新 更多