English Version

viernes, 17 de diciembre de 2010

Como configurar Eclipse y Apache para debuguear (depurar) PHP con Xdebug

Hola a todos de nuevo.

Para todos aquellos que les gusten las introducciones largas y aburridas he escrito el siguiente párrafo, para todos los demás... ¿Master Card?, no,  simplemente sáltenlo.

Sé que muchos que hayan leido varias entradas en mi blog, este les podrá parecer un tanto ecléctico, y para no variar la costumbre hoy trataré también otro tema totalmente diferente que a simple vista no parece estar muy relacionado con las entradas que he escrito anteriormente, aunque esto no sea totalmente cierto. Pues bien, aunque hay gran documentación al respecto hoy comentaré mi experiencia en configurar Eclipse para debuguear PHP con XDebug. Vamos allá:

Antes de comenzar con los pasos de la instalación he de decir que actualmente existen dos extensiones pricipalmente para poder debuguear en PHP Zend y Xdebug. Mi elección por Xdebug fue muy simple, antes Zend no tenía soporte para sistemas linux de 64 bits así que me decidí por Xdebug que sí lo permitía.

PASOS PARA LA INSTALACIÓN Y CONFIGURACIÓN:

1.- Suponemos que ya tenemos instalados y configurados una versión de Eclipse y un servidor Apache.

2.- Descargamos desde aquí la versión que queramos del source de  Xdebug. En el ejemplo la 2.1.0.

3.- Descomprimimos el archivo descargado en mi caso xdebug-2.1.0.tgz

4.- Como indica el archivo README de la carpeta raiz del archivo descargado, abrimos una consola y ejecutamos los pasos a continuación.

5.- Ejecutamos el comando phpize:

#xdebug-2.1.0> phpize

Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519


6.- Ahora ejecutamos el comando:

./configure --enable-xdebug (o: ../configure --enable-xdebug -with-php-config=/path/to/php-config si php-config no está en tu path)

#xdebug-2.1.0> ./configure --enable-xdebug

7.- Si todo ha salido bien ejecutamos el comando make.

#xdebug-2.1.0> make

Si también ha ido todo bien veremos un mensaje parecido al del siguiente recuadro:


If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
  - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
    during execution
  - add LIBDIR to the `LD_RUN_PATH' environment variable
    during linking
  - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
  - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------


8.- El comando anterior habrá creado un archivo llamado “xdebug.so” en la carpeta modules. Copiaremos este archivo a la ruta que queramos para conservar nuestros módulos.

En mi caso la copiaré a una carpeta oculta llamada “.php/modules” en el home de mi usario.

#xdebug-2.1.0> cp /modules/xdebug.so /home/user/.php/modules

9.- Localizamos nuestro archivo php.ini

#> locate php.ini

10.- Lo editamos con un editor de texto y al final del archivo realizamos las modificaciones necesarias para que quede de forma similar al siguiente recuadro:

#>sudo  nano /etc/php5/apache2/php.ini


[Zend]
zend_extension="/home/user/.php/modules/xdebug.so"
zend_extension_debug="/home/modules/xdebug.so"
zend_debugger.allow_hosts="127.0.0.1"
zend_debugger.expose_remotely=always

xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"


Para más información sobre cómo configurar Xdebug visitad esta página.

11.- A continuación reiniciamos nuestro servidor apache:

#> sudo /etc/init.d/apache2 restart

Syntax OK
Shutting down httpd2 (waiting for all children to terminate)                                                               done
Starting httpd2 (prefork)                                                                                                  done



12.- Para comprobar si se ha instalado correctamente nos situamos en la carpeta “htdocs” de nuestro servidor apache y creamos un nuevo archivo con un contenido como el del siguiente recuadro:

#htdocs> nano phpinfo.php


<?php
    phpinfo();                                                                                                                                  
?>


Guardamos y salimos.

13.- Abrimos nuestro navegador web e introducimos la siguiente dirección (suponiendo que nuestro servidor apache esté corriendo en el puerto 80)

http://localhost/phpinfo.php

Si vemos una sección similar a esta se habrá instalado correctamente:



14.- Bien pues ahora que está instalado Xdebug configuraremos nuestro eclipse para poder usarlo, así que abrimos nuestro eclipse y accedemos al menú “help - > Install new Software”.

15.- Aquí si no sabemos si tenemos instalado la extensión “PDT”  en nuestro eclipse podremos hacer click sobre el enlace “What is already installed?” y si no está instalado cerraremos la ventana y haremos lo siguiente:

16.- En el campo “Work with” seleccionaremos la url de descarga de nuestra versión de eclipse como muestra la imagen:




y en el campo “type filter text” escribiremos “PDT” como muestra la siguiente imagen:



Pulsamos en “Select All” y después en “Next”. Aceptamos los términos y seguimos los pasos hasta completar la instalación y reiniciar.

17.- Una vez reiniciado eclipse para posteriormente poder probar el debugueo haremos lo siguiente.

a) En la carpeta htdocs de nuestro servidor Apache crearemos una carpeta llamada simpleDebugExample y en ella un archivo llamado helloworld.php con el siguiente código:


<?php
    $name = "world";
    for ($i = 0; $i< 100; $i++){
        print("Hello, $name ($i)!\n");                                                                                        
    }
?>


Salvamos, guardamos y volvemos a eclipse.

De nuevo en eclipse le daremos a “File -> New -> PHP Project”. Para simplificar daremos el mismo nombre al proyecto que el de la carpeta creada en htdocs, simpleDebugExample y en la opción Contents seleccionaremos la opción “Create project at existing location (from existing source)”  y le daremos al botón Browse para seleccionar la carpeta simpleDebugExample de nuestra carpeta htdocs. Le daremos a Finish y ya tendremos nuestro proyecto importado.



18.- Ahora iremos al menú “Windows -> Preferences -> PHP -> Debug” , y ahí configuraremos las  siguientes cosas:

a) Nos aparecerá la siguiente pantalla, allí en la opción “PHP Debugger” seleccionaremos la opción XDebug y le daremos a la opción “Configure” situada a su derecha.



En la pantalla que nos aparecerá al hacer click sobre “Configure” comprobaremos que XDebug tiene el mismo puerto asignado que el que hemos definido en el archivo php.ini , que en este ejemplo es el 9000 que es el puerto por defecto usado por XDebug.


En el caso en que al intentar debuguear nuestra aplicación después de configurar todo, tengamos el  problema de que se quede colgado mostrando el mensaje “waiting for XDebug session” puede deberse entre otras causas a que el puerto 9000 esté ocupado por otro servicio en nuestro sistema como por ejemplo IPv6.  En ese caso podríamos probar a configurar XDebug en otro puerto libre.

Podemos comprobar si existe algún servicio corriendo en el puerto 9000 con el siguiente comando:

netstat -a | egrep ".*9000.*"



b) En la misma pantalla anterior del punto a) en la opción Server hacemos click sobre “PHP Servers” para configurar el “Default PHP Web Server”. Nos debe aparecer una pantalla como la siguiente:



En la pantalla está asignada la URL http://localhost por defecto al servidor “Default PHP Web Server” , lo seleccionaremos y le daremos al botón de la derecha Edit.

El siguiente paso es muy importante ya que si no lo configuramos bien nos mostrará el mensaje de error descrito en el recuadro de arriba “waiting for XDebug session”.

Nos mostrará una pantalla como la siguiente:



Seleccionaremos la pestaña “Path Mapping”  y le daremos al botón Add y nos mostrará una ventana como esta donde fijaremos las opciones como se muestra la imagen:



El significado de estas opciones es el siguiente:

- Al definir el “Path on Server” a “/simpleDebugExample” al debuguear compondrá automáticamente el path uniendo la URL de la pantalla anterior http://localhost con la carpeta que acabamos de definir quedando así http://localhost/simpleDebugExample

- Al definir el “Path in Workspace” a “/simpleDebugExample” asociamos el código existente en nuestro proyecto en eclipse al existente en nuestro servidor, ya que en realidad podríamos haber asignado un nombre distinto a nuestro proyecto.

c) Por último, de la pantalla principal mostrada en el apartado a), en la opción “PHP Executable”, haremos click sobre “PHP Executables”  y pulsaremos el botón Add que nos mostrará la siguiente pantalla:




Las opciones a rellenar son:

- Name: Asignaremos el nombre que queramos.
- Executable path: Seleccionaremos el path del ejecutable php que deseemos utilizar, si tenemos varios ejecutables php (por ejemplo uno para PHP4 y otro para PHP5) y no sabemos su ubicación podemos utilizar el comando “whereis php” que nos mostrará todos los ejecutables de php.
- PHP ini file: Seleccionaremos el php.ini que modificamos anteriormente con nuestras opciones para XDebug.
- PHP debugger: Seleccionamos XDebug

19.- Este paso es opcional. Si queremos podemos añadir nuestro navegador web favorito como por ejemplo firefox en “Window -> Preferences -> General -> Web Browser”. Ahí seleccionarmos New y rellenamos los campos que aparecen como en la siguiente imagen:



Le damos a OK y a continuación en la opción del menú “Window -> Web Browser” seleccionarermos nuestro nuevo navegador añadido Firefox. Podremos hacer lo mismo para cualquier navegador y utilizarlo como el navegador que se lanzará por defecto cuando iniciemos nuestro debugueo.

20.- Por último abrimos nustro archivo helloworld.php en eclipse y con doble click en el margen izquierdo o el botón derecho sobre la linea del bucle for seleccionaremos la opción “Toggle Breakpoints” para crear un punto de interrupción.

A continuación pulsamos con el botón derecho sobre nuestro archivo helloworld.php en la pestaña “PHP Explorer” de eclipse y tenemos dos  opciones:

a) Debuguear directamente el archivo seleccionando la opción “Debug As -> PHP Web Page” (También podemos hacerlo con PHP Script, pero para eso no hace falta configurar el servidor ni muchas de las opciones descritas anteriormente)

Nos saldrá una ventana como esta:



Le daremos a OK y seguramente nos saldrá la siguiente ventana preguntándonos si queremos cambiar a la perspectiva “PHP Debug”.




Le decimos que sí y deberíamos ver ya resaltada la instrucción en ejecución como muestra la imagen, así como las variables definidas y sus valores en la pestaña Variables.




b) Configurar nuestro debugueo con “Debug As -> Debug Configurations...” con una configuración a medida (por ejemplo podríamos deseleccionar la opción “Auto Generate” para cambiar la url por defecto), como muestra la imagen y pulsar el botón  Debug.




Podeis utilizar esta opción para iniciar el debugger sin necesidad de ejecutarlo directamente sobre un archivo.

Para más información podéis consultar tambiién este tutorial donde indica como configurar eclipse para debuguear en remoto.

Por mi parte eso es todo por hoy.

Saludos a todos.








No hay comentarios:

Publicar un comentario