Si encuentra útil esta extensión, si le ayuda a resolver sus problemas y si aprecia el apoyo brindado aquí, considere patrocinar nuestro trabajo.
Instale la extensión: presione F1
, escriba ext install php-debug
.
Esta extensión es un adaptador de depuración entre VS Code y XDebug por Derick Rethans. XDebug es una extensión PHP (un archivo .so
en Linux y un .dll
en Windows) que debe instalarse en su servidor.
Instalar xdebug. Le recomiendo que haga un archivo test.php
simple, coloque un phpinfo();
Declaración allí, luego copie la salida y péguela en el Asistente de instalación de XDebug. Lo analizará y le dará instrucciones de instalación a medida para su entorno. En breve:
En Windows: descargue la DLL precompilada apropiada para su versión PHP, arquitectura (64/32 bit), seguridad de hilos (TS/NTS) y la versión del compilador de Visual Studio y colóquela en su carpeta de extensión PHP.
En Linux: Descargue el código fuente como un tarball o clona con git, luego compile. O vea si su distribución ya ofrece paquetes prebuidados.
Configure PHP para usar xdebug agregando zend_extension=path/to/xdebug
a su php.ini. La ruta de su php.ini se muestra en su salida phpinfo()
en "archivo de configuración cargada".
Habilite la depuración remota en su php.ini
:
Para xdebug v3.xx:
xdebug.mode = debugxdebug.start_with_request = sí
Para xdebug v2.xx:
xdebug.remote_enable = 1xdebug.remote_autostart = 1xdebug.remote_port = 9000
Hay otras formas de decirle a XDebug que se conecte a un depurador remoto, como cookies, parámetros de consulta o extensiones del navegador. Recomiendo remote_autostart
(xdebug v2)/ start_with_request
(xdebug v3) porque "simplemente funciona". También hay una variedad de otras opciones, como el puerto, consulte la documentación XDebug sobre depuración remota para obtener más información. Tenga en cuenta que el puerto XDebug predeterminado cambió entre XDebug V2 a V3 de 9000 a 9003.
Si está haciendo desarrollo web, no olvide reiniciar su servidor web para volver a cargar la configuración.
Verifique su instalación verificando su salida phpinfo()
para una sección XDEBUG.
En su proyecto, vaya al depurador y presione el pequeño ícono de Gear y elija PHP . Se creará una nueva configuración de lanzamiento para usted con tres configuraciones:
Escuche xdebug Esta configuración simplemente comenzará a escuchar en el puerto especificado (por defecto 9003) para XDEBUG. Si configuró XDEBUG como recomendado anteriormente, cada vez que realiza una solicitud con un navegador a su servidor web o inicia un Script CLI que Xdebug se conectará y puede detenerse en puntos de descanso, excepciones, etc.
El lanzamiento actualmente Open Script Esta configuración es un ejemplo de depuración de CLI. Se iniciará el script actualmente abierto como una CLI, mostrará toda la salida de Stdout/Stderr en la consola de depuración y finalizará la sesión de depuración una vez que salga el script.
Inicie el servidor web incorporado Esta configuración inicia el servidor web PHP incorporado en un puerto aleatorio y abre el navegador con la Directiva serverReadyAction
. El puerto es aleatorio (localhost: 0) pero se puede cambiar a un puerto fijo deseado (Ex: Localhost: 8080). Si se necesita un script de enrutador, agréguelo con la Directiva program
. Las directivas PHP/XDebug adicionales activan la depuración en cada carga de página.
También hay configuraciones para instalaciones de XDebug V2 (Legacy).
Se puede encontrar información más general sobre la depuración con el código VS en https://code.visualstudio.com/docs/editor/debugging.
NOTA: Incluso puede depurar un script sin
launch.json
. Si no se abre ninguna carpeta y la barra de estado del código VS es púrpura, presionarF5
iniciará el script abierto con los parámetros específicos XDEBUG3. Si el ejecutable de PHP no está en la ruta, puede proporcionarle la configuración dephp.debug.executablePath
. Para que la depuración funcione, Xdebug debe estar instalado correctamente.
request
: siempre "launch"
hostname
: la dirección a la que se unirá al escuchar xdebug (predeterminado: todas las conexiones IPv6 si están disponibles, de lo contrario, todas las conexiones IPv4) o el socket de dominio unix (prefijo con unix://
) o tubería de Windows ( ?pipename
) - no se puede combinar con puerto
port
: el puerto en el que escuchar xdebug (predeterminado: 9003
). Si el sistema se establece en 0
el sistema elige un puerto aleatorio y un marcador de posición ${port}
se reemplaza con el puerto elegido en env
y runtimeArgs
.
stopOnEntry
: si se debe romper al comienzo del script (predeterminado: false
)
pathMappings
: una lista de rutas de servidor mapeo en las rutas de origen locales en su máquina, consulte "Depuración remota del host" a continuación
log
: si se debe registrar toda la comunicación entre el código VS y el adaptador a la consola de depuración. Vea la resolución de problemas más abajo.
ignore
: una matriz opcional de patrones de globas que los errores deben ignorarse de (por ejemplo **/vendor/**/*.php
)
ignoreExceptions
: una matriz opcional de nombres de clase de excepción que deben ignorarse (por ejemplo, BaseException
, NS1Exception
, *Exception
o **Exception*
)
skipFiles
: una variedad de patrones de globas, para omitir al depurar. Se permiten patrones de estrellas y negaciones, por ejemplo, **/vendor/**
o !**/vendor/my-module/**
.
skipEntryPaths
: una matriz de patrones de globas, para separar e ignorar inmediatamente para la depuración si el script de entrada coincide (ejemplo **/ajax.php
).
maxConnections
: Acepte solo este número de sesiones de depuración paralela. Se eliminarán conexiones adicionales y su ejecución continuará sin depurar.
proxy
: Configuración de proxy DBGP
enable
: para habilitar el registro de proxy establecido en true
(el valor predeterminado es `falso).
host
: la dirección del proxy. Admite el nombre del host, la dirección IP o el socket de dominio UNIX (predeterminado: 127.0.0.1).
port
: el puerto donde el adaptador se registrará con el proxy (predeterminado: 9001
).
key
: una clave única que permite que el proxy coincida con las solicitudes con su editor (predeterminado: vsc
). El valor predeterminado se toma de la configuración de VScode php.debug.idekey
.
timeout
: el número de milisegundos para esperar antes de renunciar a la conexión a proxy (predeterminado: 3000
).
allowMultipleSessions
: si el proxy debe reenviar múltiples sesiones/conexiones al mismo tiempo o no (predeterminado: true
).
xdebugSettings
: le permite anular la configuración de depuración remota de Xdebug para ajustar a Xdebug a sus necesidades. Por ejemplo, puede jugar con max_children
y max_depth
para cambiar el número máximo de niños de matriz y objetos que se recuperan y la profundidad máxima en estructuras como matrices y objetos. Esto puede acelerar el depurador en máquinas lentas. Para obtener una lista completa de nombres de características que se pueden establecer, consulte la documentación XDEBUG.
max_children
: número máximo de matriz u objetos de niños para recuperar inicialmente
max_data
: cantidad máxima de datos variables para recuperar inicialmente.
max_depth
: profundidad máxima que el motor del depurador puede regresar al enviar matrices, hashes u estructuras de objetos al IDE (no debería haber necesidad de cambiar esto a medida que se recupere la profundidad de manera incremental, el valor grande puede hacer que el IDE se cuele).
show_hidden
: esta característica puede ser establecida por el IDE si desea tener información interna más detallada sobre las propiedades (por ejemplo, miembros privados de clases, etc.) cero significa que los miembros ocultos no se muestran al IDE.
xdebugCloudToken
: en lugar de escuchar localmente, abra una conexión y regístrese con Xdebug Cloud y acepte sesiones de depuración en esa conexión.
stream
: permite influir en las transmisiones DBGP. Xdebug solo admite stdout
ver dbgp stdout
stdout
: redirigir stdout stream: 0 (deshabilitar), 1 (copia), 2 (redirección)
Opciones específicas para la depuración de CLI:
program
: ruta al script que debe lanzarse
args
: argumentos pasados al guión
cwd
: el directorio de trabajo actual a usar al iniciar el script
runtimeExecutable
: ruta al binario PHP utilizado para lanzar el script. Por defecto, el que está en la ruta.
runtimeArgs
: argumentos adicionales para pasar al binario PHP
externalConsole
: inicia el script en una ventana de consola externa en lugar de la consola de depuración (predeterminado: false
)
env
: Variables de entorno para pasar al script
envFile
: ruta opcional a un archivo que contiene definiciones de variables de entorno
Puntos de interrupción de línea
Puntos de interrupción condicionales
Puntos de interrupción del recuento de aciertos: admite las condiciones como >=n
, ==n
y %n
Puntos de interrupción de funciones
Da paso, interviene, salga
Romper al ingreso
Comience con parada en la entrada (F10/F11)
Rompiendo excepciones y errores / advertencias / avisos no capturados
Múltiples solicitudes paralelas
Rastres de pila, variables de alcance, superglobals, constantes definidas por el usuario
Matrices y objetos (incluidos el nombre de clase, propiedades privadas y estáticas)
Consola de depuración
Relojes
Establecer variables
Correr como cli
Correr sin depurar
Registro proxy de DBGP y soporte de no registro
Soporte de nube de xdebug
Para depurar una aplicación en ejecución en un host remoto, debe decirle a XDebug que se conecte a una IP diferente al localhost
. Esto se puede hacer configurando xdebug.client_host
en su IP o configurando xdebug.discover_client_host = 1
para hacer que Xdebug siempre se conecte de nuevo a la máquina que realizó la solicitud web. Esta última es la única configuración que admite múltiples usuarios que depuran el mismo servidor y "solo funciona" para proyectos web. Nuevamente, consulte la documentación de XDebug sobre el tema para obtener más información.
Para hacer que el código VS asigne los archivos en el servidor a los archivos correctos en su máquina local, debe configurar la configuración de pathMappings
en su lanzamiento. Ejemplo:
// servidor -> local "PathMappings": {"/var/www/html": "$ {WorkspaceFolder}/www", "/app": "$ {WorkspaceFolder}/App"}
Tenga en cuenta también que configurar cualquiera de las opciones de depuración de CLI no funcionará con la depuración remota del host, porque el script siempre se lanza localmente. Si desea depurar un script CLI en un host remoto, debe iniciarlo manualmente desde la línea de comandos.
El depurador puede registrarse en un proxy DBGP con una clave IDE. El proxy luego reenviará al IDE solo aquellas sesiones DBGP que tienen esta clave IDE especificada. Esto es útil en un entorno multiusuario donde los desarrolladores no pueden usar el mismo puerto DBGP al mismo tiempo. Se necesita una configuración cuidadosa que las solicitudes al servidor web contengan la tecla IDE coincidente.
La implementación oficial del DBGPPROXY.
También se recomienda una extensión del navegador de Helper Xdebug . Allí, la tecla IDE del lado de la solicitud se puede configurar fácilmente.
Haga una pregunta en StackOverflow
Si cree que encontró un error, abra un problema
Asegúrese de tener la última versión de esta extensión y xdebug instalada
Pruebe un archivo PHP simple para recrear el problema, por ejemplo, desde el TestProject
Establecer "log": true
en su Panel de consola de depuración y observación
En su php.ini, establezca xdebug.log = /path/to/logfile
(asegúrese de que su servidor web tenga permisos de escritura al archivo)
Comuníquese en Twitter @damjancvetko
Para piratear este adaptador, clone el repositorio y ábralo en el código VS. Necesita NodeJs con NPM instalado y en su ruta. También se deben instalar un PHP y XDebug recientes y en su camino.
Instale los paquetes NPM ejecutando npm install
en línea de comando en el directorio del proyecto o seleccionar Terminal / Run Task... / npm / npm: install
en el menú de código VS.
Ejecute el proceso de compilación / reloj ya sea ejecutando npm run watch
en la línea de comando en el directorio del proyecto o seleccionar Terminal / Run Build Task...
en el menú de código VS.
Inicie el adaptador de depuración abriendo la barra de ejecución y de depuración lateral, seleccionando la configuración Debug adapter
y haciendo clic en la flecha de ejecución verde (o presionando F5
). El adaptador compilado se ejecutará en "modo de servidor" y escuchará en el puerto TCP 4711.
Ejecute una instancia separada del código VS, llamado "Host de desarrollo de extensiones" ejecutando code testproject --extensionDevelopmentPath=.
En la línea de comando en el directorio del proyecto o seleccionando la ejecución de Launch Extension
y la configuración de depuración y presionando la flecha de ejecución verde. Otro atajo es ejecutar npm run start
. También puede ejecutar una compilación de información privilegiada de código VS para probar características más nuevas.
En la instancia "Extension Development Host" abre .vscode/launch.json
y la línea de configuración debugServer
. Ejecute su sesión de depuración PHP seleccionando la configuración deseada y presionando F5
. Ahora puede depurar el TestProject como especificado anteriormente y establecer puntos de interrupción dentro de su primera instancia de código VS para atravesar el código adaptador.
Se puede encontrar más sobre las extensiones de prueba en https://code.visualstudio.com/api/working-with-extensions/testing-extension.
Las pruebas se escriben con moca y se pueden ejecutar con npm test
o desde Terminal / Run Task... / npm: test
. Cuando envíe un PR, las pruebas se ejecutarán en CI en Linux, MacOS y Windows con múltiples versiones PHP y XDebug.
Antes de enviar un PR también ejecutar las tareas npm run lint
o Terminal / Run Tasks... / npm: lint
.