La clave está en que el IDE, tanto VS Code como Eclipse, levantan un puerto de escucha al cual XDebug va a invocar cuando tenga un proceso para depurar. Puesto en términos de la arquitectura cliente/servidor, el IDE es el servidor y XDebug es el cliente.
Lo primero es instalar XDebug prestando mucha atención a que sea compatible con la versión de PHP instalada, incluso en el número menor de la versión. Por ejemplo, no sirve si PHP es la versión 8.4 y XDebug es para la versión de PHP 8.3. Una manera de asegurarse de que sean compatibles es instalando ambos módulos de una misma fuente, como por ejemplo en Ubuntu sería el package manager: paquetes php-cli y php-xdebug.
Otra clave es que PHP CLI tiene un servidor integrado. Es decir, desde la línea de comando de PHP se puede iniciar un servidor propio de PHP, que no es ni Apache, ni Nginx, ni nada. Es PHP CLI. Por lo tanto, el siguiente método para depurar aplicaciones PHP CLI también sirve para depurar este servidor integrado. Este servidor es el mismo que se usa al invocar el comando php artisan serve, además de tener otra manera de ser invocado que no depende de Artisan (Laravel).
La versión de Eclipse tiene que ser PDT (PHP Development Tools).
Para conectar Eclipse o VS Code a una sesión de depuración contra php artisan serve
, necesitas tres cosas clave:
- Xdebug instalado y configurado correctamente en tu PHP.
- Una configuración de depuración en Eclipse PDT.
- Una configuración de depuración en VS Code.
Vamos paso a paso:
Paso 1: Configurar Xdebug en tu PHP
Xdebug es una extensión de PHP que permite la depuración. Necesitas asegurarte de que esté instalada y configurada para "escuchar" conexiones desde tu IDE.
-
Verificar la instalación de Xdebug: Abre tu terminal y ejecuta:
Bashphp -v
Deberías ver una línea que menciona Xdebug, por ejemplo:
with Xdebug v3.x.x, ...
Si no la ves, Xdebug no está instalado o no está habilitado. -
Encontrar tu archivo
php.ini
: Ejecuta en la terminal:Bashphp --ini
Esto te mostrará la ruta al
php.ini
que PHP CLI (y por endephp artisan serve
) está utilizando. Abre ese archivo con un editor de texto. Es normal que además de un archivo .ini general, haya otros archivos .ini particulares para los diferentes módulos o funciones que tiene PHP. Si es así, php --ini va a mostrar no uno, sino varios .ini. Es imprescindible identificar el que corresponde a la extensión XDebug, para ello se puede uno ayudar con php --ini | grep xdebug. Eso no quita que puede no haber varios .ini sino estar toda la configuración en el .ini general, en tal caso con php --ini basta para verlo. Abrir este archivo en un editor de texto. -
Configurar Xdebug en
php.ini
(para Xdebug 3.x.x): Asegúrate de que las siguientes líneas estén presentes y configuradas así. Si ves;
al principio de una línea, quítalo para descomentarla.[XDebug] zend_extension=xdebug.so ; O la ruta completa a tu archivo .dll/.so de Xdebug. Ej: C:\php\ext\php_xdebug.dll xdebug.mode = develop,debug ; Habilita el modo de desarrollo y depuración xdebug.start_with_request = yes xdebug.log = /tmp/xdebug.log ; (Opcional, pero MUY recomendable para depurar problemas de Xdebug). Pon una ruta donde PHP pueda escribir.
Importante: Después de modificar
php.ini
, debes detener/reiniciarphp artisan serve
para que los cambios tengan efecto. Hay configuraciones para especificar host y puerto, pero si no se especifica, para XDebug 3 el default es localhost, puerto 9003.
Paso 2: Configurar Eclipse PDT para la Depuración
-
Abre tu proyecto Laravel en Eclipse.
-
Ve a
Run > Debug Configurations...
(Ejecutar > Configuraciones de Depuración...). -
Crea una nueva configuración:
- En el panel izquierdo, haz clic derecho en "PHP Web Application" y selecciona "New Configuration" (Nueva configuración).
-
Configura la nueva configuración:
-
Name (Nombre): Dale un nombre descriptivo, como "Laravel Artisan Serve Debug".
-
Server (Servidor):
- Haz clic en "New..." (Nuevo...) para crear un nuevo servidor PHP.
- Server type: Built-In PHP Server
- Name (Nombre): "Laravel Artisan Serve"
- Base URL (URL Base):
http://localhost:8000
(o el puerto quephp artisan serve
esté usando). - Document Root (Raíz del Documento): Aquí viene la parte importante. Debes apuntar a la carpeta
public
de tu proyecto Laravel.- Ejemplo: Si tu proyecto Laravel está en
C:\Users\TuUsuario\proyectos\mi-laravel-app
, elDocument Root
seríaC:\Users\TuUsuario\proyectos\mi-laravel-app\public
.
- Ejemplo: Si tu proyecto Laravel está en
- Debugger: Selecciona "XDebug".
- Puerto del Depurador: Asegúrate de que sea
9003
(o el que configuraste enxdebug.client_port
enphp.ini
). - Haz clic en "Finish" (Finalizar).
-
File (Archivo):
- Deja esto como está, ya que la depuración se activará por una solicitud HTTP externa.
-
URL:
- Auto Generate (Generar automáticamente): Asegúrate de que esta casilla esté marcada. Esto construirá la URL de la página a la que quieres depurar.
-
Haz clic en "Apply" (Aplicar) y luego en "Close" (Cerrar).
Paso 3: Configurar VS Code
-
VS Code necesita una extensión para comunicarse con Xdebug.
- Abre VS Code.
- Ve a la vista de Extensiones (icono de cuadrados en la barra lateral izquierda o
Ctrl+Shift+X
). - Busca "PHP Debug" y instala la extensión creada por XDebug.org.
Paso 4: Crear la Configuración de Lanzamiento (launch.json) en VS Code
Aquí le dices a VS Code cómo quieres iniciar o adjuntar una sesión de depuración.
-
Abre tu proyecto Laravel en VS Code.
-
Ve a la vista de "Ejecutar y Depurar" (Run and Debug) (icono de un bicho con una flecha en la barra lateral izquierda o
Ctrl+Shift+D
). -
Si es la primera vez, verás un texto que dice "crear un archivo launch.json". Haz clic en ese enlace.
-
VS Code te preguntará qué entorno quieres depurar. Selecciona "PHP".
-
Esto creará un archivo
launch.json
dentro de una nueva carpeta.vscode/
en la raíz de tu proyecto. El contenido predeterminado suele ser suficiente, pero vamos a revisarlo y asegurarnos de que la parte de mapeo de rutas es correcta.JSON{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003, // Debe coincidir con xdebug.client_port en php.ini "stopOnEntry": false, // Opcional: true para que se detenga al inicio de la ejecución "pathMappings": { // ¡Esto es CRÍTICO para que los breakpoints funcionen! // 'ruta_servidor_php_ve': '${workspaceFolder}/ruta_proyecto_local' // Generalmente, la raíz de tu proyecto Laravel en el servidor web (o donde Xdebug está "pensando" que está) // se mapea a la raíz de tu proyecto en VS Code. "/var/www/html/mi-laravel-app": "${workspaceFolder}", // Si tu proyecto está en Docker/VM // O si ejecutas directamente en Windows/Linux, puede ser solo la raíz del proyecto. // Asegúrate de que esta ruta '/var/www/html/mi-laravel-app' coincide con la ruta real del proyecto en el servidor PHP // (el que `php artisan serve` usaría si lo ejecutaras en un entorno de servidor). // Para `php artisan serve` en tu máquina local, a menudo es suficiente con: "F:/proyectos/mi-laravel-app": "${workspaceFolder}" // Ejemplo en Windows si tu proyecto está ahí }, "ignore": [ "**/vendor/**/*.php" // Para ignorar archivos dentro de vendor/ ] } ] }
Punto clave:
pathMappings
-
"ruta_del_proyecto_en_el_servidor"
: Esta es la ruta absoluta donde el código PHP se está ejecutando en el servidor (o el entorno de PHP). Si estás usando Docker, sería la ruta dentro del contenedor (ej./var/www/html/tu-proyecto
). Si estás ejecutandophp artisan serve
directamente en tu máquina local, a veces es la misma ruta que tu proyecto local, o si usas un entorno de servidor web (Apache/Nginx), la ruta a la raíz de tu sitio.- Para
php artisan serve
ejecutándose localmente sin Docker: La ruta en el servidor suele ser la misma que la ruta local de tu proyecto. Si tu proyecto está enC:\Users\MiUsuario\proyectos\mi-laravel-app
, entonces la primera parte del mapeo podría serC:\Users\MiUsuario\proyectos\mi-laravel-app
. "${workspaceFolder}"
: Esto es una variable de VS Code que representa la ruta de la carpeta raíz de tu proyecto abierta en VS Code.
- Para
-
Ejemplo de
pathMappings
paraphp artisan serve
en tu máquina local: Si tu proyecto Laravel está enC:\Users\MiUsuario\Documents\Laravel\mi-app-laravel
, tupathMappings
ideal sería:JSON"pathMappings": { "C:\\Users\\MiUsuario\\Documents\\Laravel\\mi-app-laravel": "${workspaceFolder}" }
(Asegúrate de usar barras dobles
\\
en Windows o barras normales/
en Linux/macOS).
Inicia el "escucha" de depuración en VS Code:
- Ve a la vista "Ejecutar y Depurar" (
Ctrl+Shift+D
). - En el menú desplegable de configuraciones (en la parte superior, al lado del botón de play verde), selecciona "Listen for Xdebug".
- Haz clic en el botón de play verde que está al lado.
- VS Code ahora estará esperando una conexión de Xdebug en el puerto 9003. Verás una barra de herramientas de depuración flotante y la barra de estado de VS Code se volverá naranja/azul.
Sea cual fuere el IDE configurado, hay que setear breakpoints en los lugares donde se desea que se detenga la ejecución.
No hay comentarios:
Publicar un comentario