Blog de Juan Miguel Sosso | Drupal | PHP | Docker

Usar Xdebug al desarrollar un comando Drush

En mi máquina de desarrollo tengo habilitado Xdebug para el php que corre bajo Apache, pero no para el que corre en línea de comandos. En principio es mejor así ya que en algunos casos puede hacer que los comandos que corren en PHP, como drush y composer, vayan algo más lentos.

Esta mañana, modificando un comando drush custom, he tenido la necesidad de utilizar Xdebug para poder localizar un bug. Como el módulo de Xdebug no se carga para el ejecutable de línea de comando de PHP, hay que hacerlo al llamar a drush, así como configurar los parámeros necesarios.

Podemos comprobar si en nuestro caso se carga o no con el siguiente comando:

$ php -i | grep xdebug

Si no devuelve nada es que no está cargado. Podemos probar a cargarlo tecleando:

php -dzend_extension=xdebug.so -i | grep xdebug

Ahora si que debe mostrarnos la configuración de Xdebug. Puede ser que tengas que indicar la ruta completa al archivo xdebug.so, pero en mi caso no ha sido necesario. Por supuesto Xdebug tiene que estar instalado en el sistema.

Finalmente para lanzar drush con Xdebug activado debemos teclear:

$ php -dzend_extension=xdebug.so -dxdebug.remote_enable=1 ‑dxdebug.remote_autostart=1 vendor/bin/drush <comando>

Esto es para Drupal con composer y drush instalado en el proyecto. Si no es así, la ruta al comando drush será distinta en tu sistema.

Por supuesto podemos utilizarlo con cualquier otro script, no solo con drush:

$ php -dzend_extension=xdebug.so -dxdebug.remote_enable=1 ‑dxdebug.remote_autostart=1 script.php

Por defecto el puerto que utiliza Xdebug es el 9000, y nuestro IDE debe estar escuchando en él antes de ejecutar el comando. Si queremos utilizar otro se puede añadir el parámetro  -dxdebug.remote_port=9005

Espero que este mini post sea útil para quien busque como debugear desde la línea de comandos.

Juan Miguel Sosso

Añadir nuevo comentario