Debug con Xdebug, Laravel y Vagrant (Homestead) desde Sublime

28 de diciembre de 2014

El proceso de debugging es un proceso regular cuando estamos desarrollando cualquier tipo de aplicativo. Actualmente estoy trabajando en un aplicativo hecho en Laravel (PHP) y utilizamos Vagrant/Homestead (modificado) para el desarrollo local de la solución.

Encontré muy poca documentación de como hacer que esto funcione con Sublime Text 3, pero luego de hacerlo funcionar con PhpStorm decidí intentarlo con Sublime.

Esto fue lo que hice para hacerlo funcionar:

Primero, tuve que configurar Xdebug en la máquina de Vagrant, para ello edité el archivo /etc/php5/fpm/conf.d/20-xdebug.ini y agregué las siguientes líneas:


xdebug.remote_enable=1
xdebug.remote_port=9001
xdebug.remote_autostart=0
xdebug.remote_connect_back=1

Luego, tuve que reiniciar el PHP-FPM:


sudo service php5-fpm restart

Paso seguido, debemos modificar nuestro proyecto. Para ello, vamos a Sublime y creamos un nuevo proyecto (si es que no lo hemos creado) y editamos el proyecto, hasta que el mismo quede así:


{
  "folders":
  [
    {
      "follow_symlinks": true,
      "path": "/Volumes/Secondary/Projects/proyecto"
    }
  ],
  "settings": {
      "xdebug": {
           "url": "http://proyecto.app/",
           "path_mapping": {
              "/home/vagrant/Code/proyecto" : "/Volumes/Secondary/Projects/proyecto",
              "/home/vagrant/Code/proyecto/public" : "/Volumes/Secondary/Projects/proyecto/public",
            },
           "super_globals": true,
           "close_on_stop": true,
           "port": 9001
      }
  }
}

Las líneas importantes son las de path_mapping, que me hicieron perder varios minutos, pero logré que algo similar había que hacer en PhpStorm.

Luego de editarlo, debemos reiniciar el Sublime Text. Al reiniciarlo, instalamos un paquete (utilizando Package Control de Sublime) llamado “Xdebug Client”.

Lo último que debemos hacer es ejecutar el Xdebug desde Tools -> Start Debugging (Launch Browser) y estamos listos. Podemos probar poniendo algún breakpoint cerca y todo debería andar bien.