GEBEN logo

GEBEN es una extension para emacs que agrega un entorno de depuracion remoto para Emacs. Permite depurar scripts interactivamente, desde dentro de emacs, agregando breakpoints, inspeccionando el valor de las variables, etc. Actualmente el protocolo DBGp es soportado en varios lenguages de scripting con la ayuda de extensiones.

  • PHP con Xdebug
  • Perl, Python, Tcl y Ruby con las extensiones de Komodo Debugger

De esta forma, instalando las extensiones, GEBEN para emacs nos permite depurar interactivamente los lenguages PHP, Perl, Python, Tcl y Ruby.

En este articulo, la instalacion y configuracion paso a paso para depurar scripts de PHP en forma interactiva con emacs + GEBEN + Xdebug.

El debugger remoto Xdebug permite examinar estructuras de datos, interactivamente ir linea por linea y depurar el codigo. Hay dos protocolos diferentes para comunicarse con el debugger: el viejo protocolo tipo GDB el cual esta implementado en Xdebug 1.3 y 2; y el nuevo protocolo DBGp el cual esta implementado en Xdebug 2.

Instalacion Xdebug

Instalar el paquete php5-xdebug:

$ sudo aptitude install php5-xdebug

Para habiliar el depurador Xdebug es necesario hacer algunas configuraciones en el archivo php.ini. Estas configuraciones son xdebug.remote_enable para habilitar el debugger, xdebug.remote_host y xdebug.remote_port para configrar la direccion IP y puerto donde el debugger debe conectarse, y xdebug.remote_handler para configurar cual backend de depuracion usar (“gdb” o “dbgp”). Si se quiere iniciar una sesion cuando una situacion de error ocurre (error php o excepcion) entonces es necesario cambiar la configuracion xdebug.remote_mode. Los valores permitidos para esta configuracion son “req” (el valor por defecto) el cual hace al depurador iniciar una sesion tan pronto como un script es iniciado, o “jit” cuando una sesion debe solo iniciarse debido a un error.

Despues de realizar estos cambios, Xdebug todavia no iniciara una sesion de depuracion automaticamente cuando un script PHP es ejecutado. Es necesario activar el depurador dependiendo si se corre un script de la linea de comandos, o se esta invocando una pagina en un browser:

  1. Cuando se corra un script desde la linea de comandos se necesita setear una variable de entorno, asi:
    export XDEBUG_CONFIG="idekey=session_name" ;  php myscript.php

Tambien se puede configurar xdebug.remote_host, xdebug.remote_port, xdebug.remote_mode and xdebug.remote_handler en este misma variable de entorno. Todas estas configuracion tambien pueden ser seteadas en el archivo php.ini.</li>

Si queremos depurar un script iniciado a travez de un browser, simplemente agregamos XDEBUG_SESSION_START=session_name como un parametro en la URL. (ver ejemplos mas abajo)

habilitando el depurador

Agregar las siguientes lineas al archivo php.ini :

/etc/php5/apache2/php.ini

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

Reiniciar el servidor apache, para que la configuracion surta efecto.

/etc/init.d/apache2 restart

Instalacion de geben para Emacs

  • Descargar el paquete de la siguiente URL: Geben on Emacs

  • Compilar e instalar la extension en una ruta donde emacs la pueda encontrar. Basicamente, sudo make install hace todo el trabajo.</p>

$ tar -tvzf geben-0.21.tar.gz

$ cd geben-0.21

$ geben-0.21$ ls
ChangeLog  dbgp.el  etc  geben.el  LICENSE  Makefile  NEWS  README  tree-widget

/geben-0.21$ sudo make install
emacs -Q --batch --eval '(byte-compile-file "geben.el")'
Loading subst-ksc...
Loading subst-gb2312...
Loading subst-big5...
Loading subst-jis...
Wrote /home/seba/geben-0.21/geben.elc
install -m 755 -d /usr/share/emacs/22.2/site-lisp/geben
install -m 644 geben.el geben.elc /usr/share/emacs/22.2/site-lisp/geben
install -m 755 -d /usr/share/emacs/22.2/site-lisp/geben/tree-widget/geben
install -m 644 tree-widget/geben/close.png tree-widget/geben/empty.png \
tree-widget/geben/end-guide.png tree-widget/geben/guide.png tree-widget/geben/handle.png \
tree-widget/geben/leaf.png tree-widget/geben/no-guide.png tree-widget/geben/no-handle.png \
tree-widget/geben/open.png /usr/share/emacs/22.2/site-lisp/geben/tree-widget/geben
  • Editar el archivo ~/.emacs y agregar
(autoload 'geben "geben" "PHP Debugger on Emacs" t)

Ejemplo de una sesion de depuracion (debugging)

Aqui hay un ejemplo de depuracion PHP.

  1. Ejecutar Emacs.
  2. Iniciar geben, tipear: M-x geben
  3. Acceder a la pagina PHP a depurar, con cualquier browser. Puede que necesites agregar un parametro query ‘XDEBUG_SESSION_START’ si Xdebug esta configurado para requerir disparador manual para comenzar una sesion de depuracion remota. ejemplo:http://misitio.com/test.php?XDEBUG_SESSION_START=1
  4. Pronto el servidor y GEBEN estableceran conexion y una sesion de depuracion. Entonces Emacs carga el codigo fuente del script de la pagina inicial en su buffer.
  5. Ahora el buffer estará bajo el modo menor ‘geben-mode’. Se puede controlar el buffer con varias teclas:</p> <pre>spc step into/step over i step into o step over r step out g run b set a breakpoint at a line B set a breakpoint interactively u unset a breakpoint at a line \C-b display breakpoint list t set redirection mode \C-u t change redirection mode v display context variables w where q stop</pre>
Cuando se presione una tecla que no este ligada al geben-mode, GEBEN
nos preguntara para editar el script original. Al contestar &#8216;yes&#8217; GEBEN intentará cargar el archivo script via &#8216;TRAMP&#8217;.</li>

  * Para terminar la sesion de depuracion y salir de GEBEN, tipear: C-u M-x geben</ol>

screenshot: inspeccionando variables de contexto:
inspeccionando variables de contexto

screenshot: pantalla dividida y seteando un breakpoint (linea roja) :
emacs geben breakpoint

Profiling

zend_extension=xdebug.so

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

xdebug.max_nesting_level=300

; PROFILING. OPTIMAL FOR EXECUTION TRACES

;xdebug.extended_info=0
;xdebug.auto_trace=1
;xdebug.trace_output_dir=/tmp/xdebug-trace
;xdebug.collect_includes=1
;xdebug.show_mem_delta=1
;xdebug.profiler_enable=0
;xdebug.remote_enable=0
;xdebug.collect_return=1
;xdebug.collect_params=1

; PROFILING. OPTIMAL FOR  KCACHEGRIND FORMAT

xdebug.auto_trace=0
xdebug.collect_params=0
xdebug.collect_returns=0
xdebug.profiler_enable=1
xdebug.profiler_output_dir=/tmp/xdebug-profile

Tambien te puede interesar …

Otros IDES o herramientas para depuracion de PHP

Dejanos tus comentarios

Tuviste problemas instalando la extension ? Tenes alguna duda ? Queres hacer una sugerencia o correccion ? ¿ Y vos, que herramienta usas para depurar PHP ?

Copyright: http://snarvaez.poweredbygnulinux.com Sebastian Narvaez</p>

este documento ha sido publicado bajo la siguiente licencia: “Verbatim copying and distribution of this entire article are permitted in any medium provided this notice is preserved.”