Depurar aplicaciones PHP ha sido siempre una tarea titánica. Esto no es debido al lenguaje, sino a la arquitectura web que normalmente se utiliza. Lo cierto es que no era habitual contar con depuración paso a paso ni análisis de variables ni con las ayudas habituales de cualquier depurador.
Pero todo esto cambió con XDebug. Ahora sí es posible depurar PHP como es debido.
XDebug incluye soporte para DBGp, un protocolo de comunicación entre herramientas de desarrollo (nuestro Vim) y motores de aplicación (nuestro Apache).
Para instalarlo realizamos dos pasos: primero configuramos el servidor Apache y luego nuestro Vim.
La configuración del servidor Apache consiste en instalarle el módulo XDebug (en Debian apt-get install php5-xdebug).
La configuración de Vim consiste en instalarse el plugin para que actúe como cliente DBGp. La instalación consiste en descomprimir los archivos en el directorio ~/.vim/plugin.
Para utilizarlo primero tenemos que llamar a nuestra aplicación web pasándole el parámetro XDEBUG_SESSION_START=1. Lo hacemos llamando en nuestro navegador a una url del estilo http://example.com/index.php?XDEBUG_SESSION_START=1
Una vez cargada, abre el Vim, pulsa F5 y aparecerá un mensaje "Waiting for a new connection...". Refresca en el navegador la página que quieras depurar y esta aparecerá en tu Vim con varias ventanas de depuración (Watch Window, Help Window, Stack Window y Trace Window). La ventana de Help te mostrará los comandos disponibles (Step Over, Step Into, Toggle Breakpoint, eval...). Todo lo que necesitas para depurar tu aplicación.
Nota: Si F5 está ocupada (por ejemplo por el plugin de Check Syntax) la tecla para iniciar la depuración será F9.
Nota: Si sois varios los que tenéis que trabajar sobre el mismo servidor, necesitaréis asignaros cada uno un puerto diferente. Se explica como hacerlo en la referencia de tech.blog.box.net (más abajo).
Bug: El script de Vim para DBGp no soporta rutas con caracteres no estándar (acentos, eñes...). Además tienes que tener acceso al directorio donde residan los ficheros en el servidor.