使用VirtualBox远程Xdebug

时间:2012-08-20 23:15:58

标签: xdebug virtualbox remote-debugging

我正在努力让远程调试工作。 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没有监听,日志文件也会包含“已连接到客户端”消息。

知道我可能缺少什么吗?

感谢。

6 个答案:

答案 0 :(得分:7)

对我有用的是从我的主人那里运行以下内容:

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

答案 1 :(得分:5)

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

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

2)配置我的xdebug设置: 在我的情况下,设置xdebug.remote_host =“永久主机IP”非常重要 然后,外翻工作完美无缺。

希望这可以帮助那些人。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

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

要执行此操作,请发出命令ssh -L 9000:localhost:9000 yourUserName @ youVirtualMachine。

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

答案 4 :(得分:1)

如果你的日志文件中有这个:

I: Connected to client. :-)

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

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

答案 5 :(得分:0)

必须满足

3 的条件,xdebug才能与VirtualBox一起远程工作,尤其是与VirtualBox内部的Docker结合使用时。

1 )remote_connect_back = 0或主机的确切IP地址必须在remote_host中列出(有时两者不能同时使用,尤其是在docker单独使用的情况下)直接从Windows hyper-v的virtualbox中访问)

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

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