Configura un entorno de debugging en tu WAMP server con Xdebug

Si eres un desarrollador web que suele trabajar con lenguajes de programación interpretados, como PHP y JavaScript, es posible que andes depurando tus apps PHP a base de echo, print y var_dump para ver el contenido de las variables, conocer el tipo de un determinado objeto, etc.

Seguro que ya sabes a qué me refiero.

Debugar así puede ayudarte a salir del paso en alguna ocasión, pero lo cierto es que en la práctica, los desarrolladores profesionales como tú y como yo utilizamos herramientas de debugging para depurar nuestras aplicaciones.

Pues bien, el post de hoy explica cómo puedes poner en marcha Xdebug en un entorno de desarrollo (IDE) Netbeans. Esta explicación de ejemplo se lleva a cabo en las últimas versiones de todos los aplicativos (febrero 2014): Windows 8, WampServer 2.4 y NetBeans 7.4.

¿Qué es Xdebug?

Supongo que ya sabes que Xdebug es una extensión PHP especialmente diseñada para depurar programas que funciona bajo una arquitectura cliente-servidor. Esta extensión suele venir instalada en las pilas de aplicaciones XAMPP, MAMP y WAMP.

No cuesta nada comprobar esto muy rápidamente en tu propia máquina con:

echo phpinfo();

Observa si aparece o no Xdebug instalado. Como digo, nosotros estamos corriendo estas pruebas en un WampServer 2.4, por lo que si sigues esta explicación para este entorno, en tu php.ini te tiene que salir algo así:

; XDEBUG Extension

zend_extension = "c:/wamp/bin/php/php5.4.12/zend_ext/php_xdebug-2.2.3-5.4-vc9-x86_64.dll"

[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "c:/wamp/tmp"

Fíjate que Xdebug viene preinstalado en WAMP 2.4, pero no está activado. Para activarlo hay que echar mano de las directivas de configuración PHP. A continuación adjunto la configuración que recomienda el How to configure xdebug with WAMP (cómo configurar xdebug con WAMP), disponible en el Wiki del mismo Netbeans, para un entorno como el nuestro.

; XDEBUG Extension

zend_extension = "c:/wamp-2/bin/php/php5.4.12/zend_ext/php_xdebug-2.2.3-5.4-vc9-x86_64.dll"

[xdebug]
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000

Preparándonos, por si las cosas no van bien…

Si quieres, con tu Xdebug activado y ya configurado, puedes correr opcionalmente el siguiente miniscript de pruebas, para comprobar que el servidor Xdebug está bien instalado y que efectivamente puede responder a las peticiones que le llegan.

<?php
$address = '127.0.0.1';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);

socket_bind($sock, $address, $port) or die('Unable to bind');
socket_listen($sock);
$client = socket_accept($sock);
echo "connection established: $client";

socket_close($client);
socket_close($sock);

Por cierto, para ejecutar este guión necesitas tener habilitada la extensión Socket PHP, de lo contrario obtendrás este mensaje de error:

Fatal error: Call to undefined function socket_create()

Habilitar los PHP sockets es muy fácil en WAMP, tan sólo tienes que hacer un clic izquierdo en tu icono WAMP > PHP > PHP Extensions > php_sockets.

De este modo, y con la ayuda de la función socket_last_error podrás capturar en tu log de PHP los problemas potenciales que pueda plantear tu entorno específico. Así, si tienes mala suerte y resulta que tus aplicativos no funcionan como deberían funcionar, podrás capturar algunas pistas.

Desafortunadamente, algo tan sencillo como este ejercicio (esto es, poner en marcha NetBeans con Xdebug) puede plantear algún problema en algunas versiones antiguas de NetBeans debido a algún bug que a día de hoy ya estará documentado y arreglado; puedes echar un vistazo a este ejemplo de bug, el Bug 196263 – Netbeans is waiting for connection (xdebug).

En todo caso, lo anterior no tiene que pasarte a ti si tienes lo último de lo último, o sea, un WAMP 2.4 y un NetBeans 7.4.

Xdebug en NetBeans

Una vez configurado tu servidor Xdebug, es el turno de configurar el programa cliente, el NetBeans. Recuerda que Xdebug funciona bajo un esquema cliente-servidor.

Por un lado, tienes que indicar el URL de tu proyecto junto con un Index File que se corresponda con un URL relativo correcto. El siguiente pantallazo de ejemplo supone que tienes una app configurada con un host virtual Apache, cuyo ServerName es kenfollet.local, y cuyo index.php está en la carpeta raíz (de modo que no hace falta escribirlo explícitamente en el campo Index File)

Figura 1. Run > Set Project Configuration > Customize… > Run Configurations

Luego, en Tools > Options > Debugging sólo tienes que comprobar que el número de puerto del campo Debugger Port se corresponde con el que has configurado en el php.ini (9000 por defecto).

Figura 2. En Tools > Options > Debugging hay que comprobar que el número de puerto coincide con el del php.ini

Con todo lo anterior bien configurado ya puedes iniciar sesiones de depuración con Xdebug desde NetBeans. Tan sólo tienes que hacer un Debug > Debug project, o pulsar la combinación de teclas Ctrl + F5, o clicar en el botón Debug project de la barra.

Ya para terminar, ¿qué mejor que la misma documentación oficial de NetBeans IDE para repasar cómo se depuran las aplicaciones en este entorno? Si necesitas aclarar cualquier duda concreta que puedas tener sobre cómo debugar apps en PHP con NetBeans, no dejes de consultar el documento Debugging PHP Source Code in the NetBeans IDE.