Remote Xdebug with VirtualBox

remote-debuggingvirtualboxxdebug

I'm trying to get remote debugging to work. The PHP is running on a VM and I'm trying to debug from NetBeans on the host machine.

I've followed the instructions here, forwarded port 9000 in the Windows 7 firewall and in the VirtualBox network settings, and set up path mappings in NetBeans. My xdebug settings look like this:

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

When I load the URL I want to debug (using the correct idekey) it logs the following:

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>

However, NetBeans remains waiting for a connection. I've got it set up to stop at the first line, in addition to having a breakpoint set. The log file will include the "Connected to client" message even when NetBeans is not listening.

Any idea what I might be missing?

Thanks.

Best Answer

What worked for me was running the following from my host:

ssh -R 9000:localhost:9000 yourUserName@yourVirtualMachine

Note the use of the -R flag instead of -L. I had trouble using port forwarding to get things working, while the ssh tunnel worked perfectly. Note you could also do this by running the ssh command from within the VM and connecting to the host with the -L flag.

Since I ended up on this question while working with Vagrant, this is the command I personally used, use the password 'vagrant' when prompted:

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