12

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

我已经按照此处的说明,在 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 未在侦听,日志文件也会包含“已连接到客户端”消息。

知道我可能会错过什么吗?

谢谢。

4

6 回答 6

8

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

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
于 2013-04-16T15:34:25.987 回答
5

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

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

2)配置我的xdebug设置:在我的情况下,设置xdebug.remote_host =“永久主机IP”很重要,然后一切正常。

希望这可以帮助那里的人。

于 2012-12-29T17:56:11.640 回答
4

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

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

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

于 2015-02-23T19:13:22.240 回答
2

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

I: Connected to client. :-)

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

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

于 2014-03-24T11:06:01.210 回答
1

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

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

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

于 2012-10-23T13:35:44.333 回答
0

必须满足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 editor,而不是 virtualbox 端口转发,不是 virtualbox 必须在那个端口监听被转发到一些内部应用程序,但外部 php-editor 必须监听它=那个端口

于 2020-03-03T05:30:00.397 回答