PHP Remote Debugging in VIM with XDebug

XDebugs remote debugging feature is very helpful when trying to trace code in an unknown application or debugging a tricky problem. It works with most IDEs but can also be set up to work with Vim.

To get it working you need to install the XDebug Apache module:

root@michael:~# apt-get install php5-xdebug

and configure the XDebug config (/etc/php5/conf.d/xdebug.ini) for remote debugging:

xdebug.remote_enable="1"
xdebug.remote_host="localhost"
xdebug.remote_port="9000"
xdebug.remote_mode="req"
xdebug.remote_autostart="0"
xdebug.remote_log="/tmp/xdebug_remote.log"

The remote_host needs to be the hostname or IP where Vim is running. The Vim debugging plugin listens on port 9000. Make sure your firewall settings allow for connections to this host and port. The req mode starts the debugger for every request.

Next you need to download and install the DBGp Remote Debugger Interface plugin for Vim. There are several different versions available. Make sure to use the latest version by Hadi Zeftin. To do so, download the file and copy its contents into your Vim plugin directory (~/.vim/plugin/). If you want to make the plugin available to all users on your system you can also copy the plugin files to the central vim plugin directory (/usr/share/vim/vim73/plugin/).

You can make various adjustments if you like. I prefer to set the debugger timeout to 20s and the array/object depth to 10. You can change this by adding the following line to your ~/.vimrc:

let g:debuggerTimeout = 20
let g:debuggerMaxDepth = 10

Next you need enable the debugging mode by calling your script with the ?XDEBUG_SESSION_START=1 query parameter.

http://www.example.com/?XDEBUG_SESSION_START=1

You only need to do this once and debugging will be enabled for 1 hour. You can change this time by setting a different xdebug.remote_cookie_expire_time in your xdebug.ini. There are also various browser plugins (Chrome, Firefox) available to enable and disable the debugging mode but in my opinion the query parameter is easy enough.

Once this is done you can open the file you want to debug in Vim and hit F5. You should see a status message like this:

waiting for a new connection on port 9000 for 20 seconds...

Next call your script in your browser and Vim should switch into debugging mode.

You can trace the code by using F2-F4. F12 lets you inspect the property under your cursor. Once you are in debug mode you can also open other files, set breakpoints and run the program till hitting the breakpoint by hitting F5. To set a breakpoint switch to command mode and enter Bp (:Bp).

I'm available for contracting work. Check out my LinkedIn profile and my portfolio page for an overview of my skills and experience. If you are interested in working with me please use the contact form to get in touch.

PHP Remote Debugging in VIM with XDebug

Leave a Reply

Your email address will not be published. Required fields are marked *