Debug con Xdebug y Aptana (y Notepad++)

Aunque quizás llevo bastante tiempo desarrollando aplicaciones web, no me había preocupado mucho por encontrar un modo de hacer depuración línea por línea (como lo hacía cuando estudiaba Turbo Pascal... cuantos años ya).

No creía que se podría hacer con comodidad. Suponía que el procedimiento era demasiado técnico o se requería de un IDE pesado o costoso.

Por ejemplo, en Java, no llegué a hacerlo. Ni siquiera con las aplicaciones no web. Quizás porque fueron muy pocas o muy pequeñas como para sentir la necesidad.

Con PHP, he sentido muchas veces la necesidad, pero hasta ahora había podido sobrevivir poniendo echo y print_r.

Pero ahora, trabajando con Drupal, aunque el código es relativamente claro, hay varios paradigmas de organización conviviendo y con frecuencia no sé por donde entrar. Hay documentación, pero muchas veces siento que sólo parece aumentar las sombras del bosque. Usar la técnica de echo y print_r es util, como dejar migajas en el camino, pero puede ser algo tedioso para una ruta larga o compleja.

Entonces me animé por encontrar un modo mejor de depurar PHP. Quizás ya era la hora. Encontré que se puede hacer usando Xdebug y Aptana (un IDE derivado de Eclipse). Incluso se puede usar Notepad++ (mi editor de textos favorito).

Base
Una PC con Windows 7, XAMPP 1.7.1 (PHP 5.2).
También lo pude hacer en una PC con Linux Centos 5, Apache 2 y PHP 5.2.

Xdebug
Xdebug es una extensión que hace que Apache genere información para la depuración.
La instalación depende de la plataforma (en Windows, las extensiones de Apache son .dll y, en Linux, son .so, por ejemplo).
Puede ubicar el dll directamente en http://xdebug.org/download.php, o usar el wizard http://xdebug.org/wizard.php (sin embargo ya no soporta PHP compilado con MSVC6). Allí aparece una caja de texto donde se puede pegar la selección copiada (Edit, Paste) de un phpinfo generado por el PHP que se tenga instalado.
Una pagina phpinfo es fácil de hacer. Simplemente guarde en el directorio web un archivo phpinfo.php con el siguiente contenido:
<?php phpinfo(); ?>
y luego acceda a http://localhost/phpinfo.php. Debe aparecer una página larga con muchas tablas pintadas de azul. El find-binary de Xdebug no requiere el código fuente de la página, sino que simplemente la seleccione toda (Edit, Select all, Copy).
Copiado el texto copiado del phpinfo en la caja, luego de pulsar el botón Analyze my phpinfo output() aparecerá un conjunto de instrucciones que hay que seguir para instalar Xdebug. Sígalas.

Por ejemplo, para mi caso en Windows, requerí bajar php_xdebug-2.1.0-5.2-vc6.dll que copié en el directorio php/ext/. Luego modifiqué php/php.ini:

[Zend]
;zend_extension_ts = "C:\bin\dev\xampp_171\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\bin\dev\xampp_171\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:

[XDebug]
;; Only Zend OR (!) XDebug
;zend_extension_ts="C:\bin\dev\xampp_171\php\ext\php_xdebug.dll"
zend_extension = "C:\bin\dev\xampp_171\php\ext\php_xdebug-2.1.0-5.2-vc6.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\bin\dev\xampp_171\tmp"

Luego de reiniciar Apache, si se reconoce a la extensión Xdebug, al correr el phpinfo se podrá observar algo como:


Aptana
En Aptana instalé el soporte para PHP (PDT y PHP Debugger).
En Windows, Preferences, PHP, Debug, elegí PHP Debugger: XDebug, Server (localhost), PHP Executable.


Para probar el depurador, en el directorio web creé un archivo test/test.php, con algún contenido simple como:

<?php
$a = 10;
for ($i=0; $i<$a; $i++) {
  echo $i;
}
?>

Luego, cree un nuevo proyecto PHP a partir del directorio test/. Luego seleccioné el archivo test.php e hice click en Debug as PHP Web Page. La depuración se detiene en la primera línea. Luego puede ir haciendo F5 para ir avanzando, o tambié F6. Podrá encontrar más opciones de depuración bajo el menú Run.


Notepad++
Descargué el plugin DBGP de http://sourceforge.net/projects/npp-plugins/files/DBGP%20Plugin/, extraje el dll (dbgpPlugin.dll) y lo coloqué en el directorio plugins.
Al iniciar nuevamente Notepad++, encontré el menú Plugins/DBGp.
Entré a Plugins/DBGp/Config e inquiqué los parámetros para el cliente DBGp.


Luego, en el menú del plugin, inicié el debugger.
Finalmente, entré a la dirección http://localhost/test/test.php?XDEBUG_SESSION_START=test. Noté que el botón de Notepad++ parpadeaba.



Ahora, a aprender a depurar módulos :-) Ojalá esta información le sirva de ayuda.

Referencias

Comentarios

  1. excelente tutorial, me ha servido mucho ya que queria probar una herramienta de depuración de código php pero no queria usar algo asi como eclipse o netbeans porque me acostumbre al notepad++, muchas gracias!

    ResponderEliminar
  2. Me alegra que te haya servido. Buena suerte!

    ResponderEliminar
  3. ohhhhhhh maravilloso, creo que con notepad++ puedo hacer de todo xD ¡¡¡ , me gustaría saber donde puedo ver más plugins para notepad++ derepente alguno para hacer templates de código, como autocompletar etc, gracias.

    ResponderEliminar
  4. Me parece que, en el menú, puedes entrar a Plugins, Plugin Manager.

    Además, encontré estos enlaces:
    http://sourceforge.net/projects/npp-plugins/
    http://opensourcesoft.org/software/27-notepad-plugins-and-which-you-really-need/

    ResponderEliminar
  5. logré algo mucho mejor xD ¡¡¡, le instalé el netbeans luego el plugin que detalla esta página http://arturito.net/2011/05/21/local-and-remote-php-debuging-in-netbeans-with-xdebug-on-google-chrome-just-like-in-visual-studio/

    ResponderEliminar
  6. Gracias por los links, excelente blog origen de mis dichas y felicidades xD¡¡¡.

    ResponderEliminar
  7. Muchas gracias, me sirvio

    Para el que no sepa, xdebug provee una herramienta que analiza tu configuracion de apache y te dice que libreria tenes que bajar, tenes que pegar el codigo fuente generado por la funcion phpinfo

    http://xdebug.org/wizard.php

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Drupal sí, drupal no

CSS3 para mejorar el breadcrumb de un tema Zen