Depurar PHP (y Java) remotamente desde Vim
Tengo una licencia de Aptana. Aptana es bueno y lo uso de vez en cuando. Podría utilizar PDT para depurar PHP desde Aptana. Pero aunque Aptana tiene muchas cosas buenas, Eclipse no es mi herramienta preferida. Me empiezo a sentir cómodo usando Vim ahora que lo tengo a mi gusto y me gustaría poder depurar desde Vim.
No hace falta buscar mucho para encontrar que aunque posible, la operación requiere algunos detalles. Espero que la explicación que viene a continuación le sirva a alguien.
Xdebug en el servidor
Lo primero que necesitamos para depurar PHP remotamente, desde el cliente que sea, es instalar la extensión XDebug. Podemos encontrar binarios compilados para la plataforma que necesitemos. En Windows podemos encontrar un puñado de versiones (VC6/VC9, thread-safe/no-thread-safe, 32bit/64bit) precompiladas según lo que necesitemos.
Una vez bajada la librería (.so o .dll) apropiada la movemos al directorio de extensiones de PHP (normalmente el directorio ext dentro de donde tengamos instalado PHP). Después en editamos el php.ini.
En la sección de extensiones añadimos:
zend_extension="c:/php/ext/php_xdebug-4.4.1-2.0.5.dll"
Con la ruta apropiada, evidentemente. Si usamos una versión de PHP anterior a 5.3 usaremos zend_extension_ts en lugar de zend_extension. Luego añadiremos una sección para configurar la extensión:
xdebug.remote_enable = 1 xdebug.remote_port = 9000 xdebug.remote_host = localhost
Podemos utilizar el puerto que prefiramos y cambiar el nombre de host según necesitemos. Tras reiniciar Apache, nos hacemos una paginita que contenga <?php phpinfo() ?> si no la teníamos ya lista y comprobamos que la extensión aparece correctamente cargada.
El cliente
Ahora ya estamos en disposición de depurar remotamente. Sólo necesitamos un cliente capaz de hacerlo. Por suerte existe un plugin para Vim para depurar con XDebug. La pega es que necesita Python. Más concretamente necesitaremos la versión de Python contra la que esté compilado nuestro Vim.
Podemos ver esto desde el propio Vim ejecutando :version. En mi caso, ahora que estoy con la distribución normal de Windows de Vim7.2, aparece que la librería dinámica de Python contra la que se ha compilado es python24.dll. Así que bajamos e instalamos Python 2.4. En mi otra máquina, Vim está compilado contra python25.dll, así que instalaré ese allí.
Instalamos el plugin simplemente extrayendo los dos ficheros que contiene el archivo comprimido a nuestro directorio de plugins de Vim. En Windows, ahora es necesario realizar algunos cambios al plugin de Vim para que trabaje correctamente con las rutas de directorios adecuadas. De modo que editamos el fichero debugger.py, donde necesitaremos cambiar la ruta de self.sessfile. También tenemos que hacer unos cambios globales de todas las apariciones de getAttribute['filename'][7:] por getAttribute['filename'][8:] y lo mismo para getAttribute['fileuri'][7:].
Depurando!
Con todo listo, ahora sólo nos queda saber cómo arrancar la depuración. Es fácil. Abrimos tanto Vim como nuestro navegador. Visitamos una URL de la aplicación y añadimos al final un parámetro ?XDEBUG_SESSION_START=1. Al hacer esto, la extensión Xdebug intentará conectar con Vim en el puerto que le hemos indicado (9000). Desde Vim presionamos F5 para empezar a escuchar, lo cual veremos en la barra de estado de Vim con un mensaje como Waiting for a new connection on port 9000 for 5 seconds.... Volvemos ahora al navegador y refrescamos la URL. Ya estamos depurando.
La ayuda del plugin explica cómo usarlo. Lo más básico: poner un punto de ruptura se hace con :Bp y para ejecutar el código hasta el siguiente punto F5. Otras instrucciones, como digo, en la ayuda del plugin.
Y Java?
Depurar Java es más sencillo. Basta con arrancar la JVM con los flags apropiads para permitir la depuración remota y en Vim utilizar el plugin Java Kit que, entre otras variadas cosas, nos permite depurar.

