【问题标题】:Remote Xdebug with VirtualBox使用 VirtualBox 进行远程 Xdebug
【发布时间】:2012-08-16 07:20:09
【问题描述】:

我正在尝试进行远程调试。 PHP 在 VM 上运行,我正在尝试从主机上的 NetBeans 进行调试。

我已按照说明here,在 Windows 7 防火墙和 VirtualBox 网络设置中转发了端口 9000,并在 NetBeans 中设置了路径映射。我的 xdebug 设置如下所示:

xdebug.remote_enable = On
xdebug.remote_connect_back = On
xdebug.idekey = "netbeans-xdebug"
xdebug.remote_log = /tmp/xdebug.log

当我加载要调试的 URL 时(使用正确的 idekey),它会记录以下内容:

I: Checking remote connect back address.
I: Remote address found, connecting to 192.168.0.1:9000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" 
         xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
         fileuri="file:///home/dev/web/projects/project.com.vm/httpdocs/index.php" 
         language="PHP" protocol_version="1.0" 
         appid="1380" 
         idekey="netbeans-xdebug">
   <engine version="2.2.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2012 by Derick Rethans]]></copyright></init>

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>

但是,NetBeans 仍在等待连接。除了设置断点外,我还将它设置为在第一行停止。即使 NetBeans 未在侦听,日志文件也会包含“已连接到客户端”消息。

知道我可能缺少什么吗?

谢谢。

【问题讨论】:

  • 所以我走了另一条路,并开始使用 VIM 在 VM 上进行本地调试(遵循these instructions)。仍然会感谢任何我无法让它远程工作的线索。

标签: xdebug virtualbox remote-debugging


【解决方案1】:

对我有用的是从我的主机运行以下内容:

ssh -R 9000:localhost:9000 yourUserName@yourVirtualMachine

注意使用 -R 标志而不是 -L。我在使用端口转发来让事情正常工作时遇到了麻烦,而 ssh 隧道工作得很好。请注意,您也可以通过在 VM 中运行 ssh 命令并使用 -L 标志连接到主机来执行此操作。

由于我在使用 Vagrant 时遇到了这个问题,所以这是我个人使用的命令,提示时使用密码“vagrant”:

ssh -p 2222 vagrant@127.0.0.1 -R 9000:localhost:9000

【讨论】:

    【解决方案2】:

    我对此问题的解决方案如下:

    1) 在网络配置中启用端口转发(使用 NAT 适配器) 我只是使用了端口 9000 以及主机和来宾的 IP 地址。协议是 TCP

    2) 配置了我的 xdebug 设置: 在我的情况下,设置 xdebug.remote_host = "永久主机 IP" 很重要 然后一切都很顺利。

    希望这对那里的人有所帮助。

    【讨论】:

    • 这对我有帮助。我最终按照你说的做了,在我的 xdebug.remote_host 中,使用了我的 DHCP 分配的 IP 地址。但是,这仅在您连接到路由器的情况下才有成效。当你完全独自飞行时,有什么办法可以让它工作,比如没有连接到路由器?
    • 我在 Mac 上使用 VirtualBox (ubuntu)。我必须将我的 xdebug.remote_host 配置为 Mac(主机)计算机的 IP 地址。唯一烦人的是我的 IP 地址发生了变化,所以当我在全球范围内移动时,我必须保持设置。
    【解决方案3】:

    我添加了 4 个选项以在我的虚拟机项目中使用 Xdebug:

    xdebug.remote_enable = On
    xdebug.remote_host = [YOUR_HOST_IP]
    xdebug.remote_connect_back = On
    xdebug.remote_autostart = On
    

    只要您的调试器正在侦听,它就应该在断点处中断。

    【讨论】:

      【解决方案4】:

      如果您的日志文件中有此内容:

      I: Connected to client. :-)
      

      这意味着 Xdebug 已成功连接到 IDE。

      IDE (netbeans) 简单地关闭连接,甚至不尝试发送任何信息。如果它不知道如何处理您示例中的文件名 (file:///home/dev/web/projects/project.com.vm/httpdocs/index.php),就会发生这种情况。原因是您的 IDE 中没有正确的路径映射设置。

      【讨论】:

        【解决方案5】:

        虚拟机需要能够与主机通信,并且要实现这一点,您需要转发 9000 来执行此操作。此步骤在某些设置中未描述,因为它发生在后台。

        为此,发出命令 ssh -L 9000:localhost:9000 yourUserName@youVirtualMachine。

        为了简化这一点,我在 /etc/hosts 和我的 ~/ssh/config 文件中都有虚拟机的名称。

        【讨论】:

        • 试过这个。仍然不适合我。日志输出没有变化。
        【解决方案6】:

        3 必须满足 xdebug 与 VirtualBox 远程工作的条件,尤其是在 virtualbox 中与 Docker 连接时。

        1) remote_connect_back=0 或者你的主机的确切ip地址必须列在remote_host中(,有时两者不能同时工作,特别是在docker分开的情况下直接从windows hyper-v的virtualbox)

        2) 不能在端口 9000 上公开其他应用程序(例如 web-project),必须为 php 编辑器保留该端口,或者必须由编辑器/侦听器(或 php)保留不同的端口web 项目),并从 php 寻址/传输到

        3) 与第二点类似,virtual box 必须没有端口转发到该端口,因为它会有效地占用它,但它必须保留给 php 编辑器,而不是用于 virtualbox 端口转发, 不是 virtualbox 必须在该端口上侦听才能转发到某个内部应用程序,但外部 php-editor 必须侦听它=该端口

        【讨论】:

          猜你喜欢
          • 2017-08-31
          • 2015-07-04
          • 2011-06-19
          • 1970-01-01
          • 2011-11-06
          • 1970-01-01
          • 2012-04-06
          • 2013-07-13
          • 1970-01-01
          相关资源
          最近更新 更多