![无法通过虚拟网络连接到 xdebug - Vagrant Virtualbox](https://linux22.com/image/597474/%E6%97%A0%E6%B3%95%E9%80%9A%E8%BF%87%E8%99%9A%E6%8B%9F%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%E5%88%B0%20xdebug%20-%20Vagrant%20Virtualbox.png)
我正在尝试使用 Virtualbox / Vagrant / Puppet 设置一个开发箱,目的是最终将所有机器配置到生产环境。然而,这暂时阻止了我继续前进。我已经在 Windows 7 上安装了 ubuntu lucid。
当尝试通过在 eclipse 中启动调试会话来连接到 xdebug 时,它会在 57% 处挂起(当 eclipse 无法与 xdebug 通信时很常见)。这是我的 xdebug.ini,此处的设置出现在 phpinfo() 中。
xdebug.remote_enable=On
xdebug.remote_handler=dbgp
xdebug.remote_host=192.168.56.1
xdebug.remote_port=9000
我现在想知道这是否是端口转发的问题?如果 eclipse 正在查找端口 9000,它会在虚拟机上找到端口 9000 吗?
任何帮助将不胜感激!
答案1
我发现这是许多网络接口的问题。当我将 xdebug.remote_host 设置为本地计算机(运行 virtualbox 的计算机)用于访问互联网的 IP 地址时,调试工作正常。这并不意味着外部 IP,而是我的计算机在本地 LAN 中的 IP(从该 IP 访问互联网)将 IP 地址设置为与主机专用适配器配对的地址(例如 192.168.56.1)不起作用。但是:我使用主机专用适配器一次运行了整个系统。虽然我 – 就我而言 – 无法弄清楚是什么起了作用。唯一不同的是,计算机上的所有其他连接都被禁用了。但我无法重现我当时的状态。
编辑:好的,我找到了问题所在:该问题是 Windows 问题(还有什么问题?)。Windows 似乎将网络适配器视为真实适配器,因此将它们包括在防火墙问题中。您需要告诉 Windows,所有“VirtualBox 仅主机以太网适配器”设备都不是真实设备。
为此,你必须对注册表进行一些小的更改:打开 regedit 并导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
在此键中,您将找到系统使用的所有类型的适配器。找到那些具有属性“DriverDesc”且值为“VirtualBox Host-Only Ethernet Adapter”的键,并添加一个名为“*NdisDeviceType”的新 DWord 属性,其值为 1。重新启动您的机器即可。
请注意,从那时起,所有 VirtualBox 主机专用以太网适配器将不再显示在网络和共享中心!
一旦完成,XDebug 甚至可以使用 xdebug.remote_connect_back = 1 参数,而以前它是无法做到这一点的!
答案2
尝试使用xdebug.remote_connect_back代替远程主机,假设你的 vagrant 机器不能被外界访问。
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.remote_handler=dbgp
xdebug.remote_port=9000