Depuración remota de Drupal con Eclipse y Xdebug

Fotografía: Vásquez Ponte

Configuración del entorno de desarrollo integrado (IDE) Eclipse con Xdebug para la depuración remota de Drupal 7 en un cliente Windows.

Pre-requisitos

Configuración de Eclipse para Drupal 7

En esta guía vamos a usar la versión estándar KEPLER de Eclipse instalada en un cliente Windows. Sin embargo, también se puede usar un cliente Linux o Mac.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

El objetivo es configurar Eclipse en el cliente y así poder depurar la instalación de Drupal 7 en un servidor LAMP remoto.

PDT (PHP Development Tools)

Instalar el paquete PDT (herramientas de desarrollo de PHP) para Eclipse (en Eclipse seleccionar el menú Ayuda -> Instalar software nuevo).

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Drupal Plug-in

Instalar el complemento (plug-in) Drupal para Eclipse como se muestra abajo.

  • Nombre: XTND.US
  • Ubicación: http://xtnd.us/downloads/eclipse
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Drupal Hooks

Instalar la colección de plantillas de código de Drupal 7 para Eclipse PDT. Descargar las plantillas para Drupal 7 de la página del proyecto (en este ejemplo el archivo eclipse-7.x-1.2.tar.gz) y extraer el archivo Drupal.xml. Se trata de un archivo XML para importar las plantillas de ganchos (hooks) de Drupal 7 en Eclipse.

En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Editor -> Plantillas e importar el archivo Drupal.xml como se muestra abajo.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Normas de código para Drupal

Cambiar el formato de codificación de archivos y saltos de línea. En Eclipse seleccionar el menú Ventana -> Preferencias -> General -> Espacio de trabajo y definir las opciones

  • Codificación de archivos de texto: UTF-8
  • Nuevo delimitador de línea de archivos de texto: Unix
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Editor -> Escribiendo y desactivar la opción

  • Al pegar: Ajustar margen adicional
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Cambiar la configuración para utilizar espacios en lugar de tabuladores. En Eclipse seleccionar el menú Ventana -> Preferencias -> General -> Editores -> Editores de texto y activar la opción

  • Insertar espacios por tabuladores
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Estilo de código -> Dar formato y crear un perfil nuevo para Drupal (en este ejemplo "Drupal Format") con la configuración general

  • Norma de tabulador: Espacios
  • Tamaño del margen adicional: 2
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Activar el perfil nuevo "Drupal Format" como se muestra en la siguiente imagen.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Cambiar la configuración para eliminar los espacios finales en blanco en todas la líneas. En Eclipse seleccionar el menú Ventana -> Preferencias -> PHP -> Editor -> Acciones de guardar y activar las opciones

  • Eliminar espacios finales en blanco
  • Todas las líneas
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Proyecto "Drupal7"

Descargar la versión recomendada del núcleo de Drupal 7 (en este ejemplo el archivo drupal-7.23.tar.gz) y descomprimirlo en la carpeta raíz de documentos (/srv/www/drupal.test.server/htdocs/) del host virtual drupal.test.server. Se puede acceder a ese directorio en el servidor LAMP desde el cliente Windows usando Samba.

La carpeta extraída drupal-7.23 contiene los achivos del núcleo de Drupal 7. Cambiar el nombre de esa carpeta a drupal7 para simplificar la ruta de los archivos.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En Eclipse crear un proyecto PHP nuevo "Drupal7" a partir de los archivos del núcleo de Drupal 7.

  • Nombre del proyecto: Drupal7
  • Directorio: W:\drupal.test.server\htdocs\drupal7
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Configuración de Xdebug

En Eclipse seleccionar el menú Ventana -> Preferencias -> General -> Navegador Web y activar el navegador externo que prefiera. En este ejemplo usamos Firefox.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Crear una configuración de depuración para el proyecto Drupal7 en Eclipse.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En la parte izquierda seleccionar el tipo Aplicación Web PHP (PHP Web Application) y darle el nombre "Drupal 7 - PHP Web Application".

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En la misma ventana, en la sección Servidor, pulsar el botón Nuevo (New) para crear una configuración nueva de Servidor PHP como se muestra abajo.

  • Nombre: Drupal 7 - PHP Web Server
  • URL Base: http://drupal.test.server
  • Raíz de la web local: W:\drupal.test.server\htdocs\drupal7
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Continuar (Next) añadiendo una asignación de ruta nueva con los valores

  • Ruta en el servidor: /srv/www/drupal.test.server/htdocs/drupal7
  • Ruta en el espacio de trabajo: /Drupal7
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

La ruta remota (LAMP) y local (Workspace) asignada se muestra en la imagen que sigue.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Pulsar el botón Finalizar (Finish) para cerrar la ventana de Servidor PHP y continuar con la configuración de depuración "Drupal 7 - PHP Web Application".

Seleccionar el Servidor PHP recién creado y el archivo index.php del espacio de trabajo.

  • Servidor PHP: Drupal 7 - PHP Web Server
  • Archivo: /Drupal7/index.php

En la sección URL, desactivar "Generar automático" y añadir el valor /drupal7/index.php en el campo derecho para formar finalmente la URL

  • URL: http://drupal.test.server/drupal7/index.php
Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Continuar con la configuración del Depurador (Debugger). Seleccionar XDebug y configurarlo como se muestra abajo.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Utilizar el mismo puerto de depuración (Debug Port) de Xdebug en el servidor LAMP remoto (xdebug.remote_port=9000).

  • Puerto de depuración: 9000

Pulsar el botón Aceptar (OK) para guardar los cambios.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Finalmente, iniciar la depuración de Drupal 7 haciendo clic en el botón Depurar (Debug).

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En Eclipse, aceptar el cambio de la perspectiva PHP a Depuración. En la parte derecha de la ventana se pueden observar las variables.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Se abrirá una ventana nueva del navegador externo configurado en Eclipse (en este ejemplo Firefox).

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En Eclipse, continuar paso a paso con la depuración pulsando el botón Paso Sobre (Step Over) o la tecla F6 hasta llegar al final.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

En el navegador externo se puede ver ahora la primera página de la instalación de Drupal 7.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Eclipse está ahora configurado con Xdebug para la depuración remota de Drupal 7.

Solución de problemas (Troubleshooting)

Xdebug en Eclipse PDT se bloquea en el 57% (Waiting for Xdebug session)

En Eclipse, la depuración del proyecto no avanza y se queda colgada en 57%.

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

El puerto de depuración ya está ocupado

En una consola de comandos en el cliente Windows ejecutar

netstat -nb

Comprobar que el puerto de depuración (9000) no está siendo usado por otro proceso. Si es necesario, cambiar el puerto de depuración (por ejemplo a 9001) en Eclipse y en el servidor LAMP.

Xdebug está usando IPv6 en Eclipse

En una consola de comandos en el cliente Windows ejecutar

netstat -nb

Comprobar si Xdebug está usando IPv6

TCP      [::]:9000

En el servidor LAMP Xdebug sólo puede comunicarse con IPv4. Para forzar el uso de IPv4 en Eclipse, añadir la siguiente línea en el archivo de configuración de Eclipse eclipse.ini

Extracto del archivo: eclipse.ini

-Djava.net.preferIPv4Stack=true

Reiniciar Eclipse y comprobar con el comando netstat que Xdebug está ahora usando IPv4

TCP      0.0.0.0:9000

El cortafuego (Firewall) en el cliente Windows está bloqueando la comunicación

Desde el servidor LAMP ejecutar el comando

telnet 192.168.0.155 9000
Trying 192.168.0.155...
telnet: Unable to connect to remote host: Connection timed out

192.168.0.155 es la dirección IP del cliente Windows configurada en el servidor LAMP.

Buscar alguna regla de entrada del cortafuego en el cliente Windows que esté bloqueando la comunicación con Eclipse (Java).

Vásquez Ponte - Depuración remota de Drupal con Eclipse y Xdebug

Si es necesario, desactivar o cambiar la regla de entrada en el cortafuego.

Desde el servidor LAMP, comprobar nuevamente la conexión al cliente Windows por el puerto de depuración de Xdebug.

telnet 192.168.0.155 9000
Trying 192.168.0.155...
Connected to 192.168.0.155.
Escape character is '^]'.

El sistema para autocompletar código no funciona en Eclipse PDT

El asistente para autocompletar el código y resaltar la sintaxis de PHP (PDT) no está funcionando en la versión KEPLER de Eclipse.

Para solucionar este problema, apagar Eclipse, eliminar los archivos *.db en el directorio workspace/.metadata/.plugins/org.eclipse.dltk.core.index.sql.h2/ y, finalmente, iniciar Eclipse.