Saltar al contenido

Xdebug con Visual Studio Code ignora algunos puntos de interrupción

Luego de mucho luchar ya hallamos la contestación de este apuro que algunos de nuestros usuarios de este espacio han tenido. Si tienes alguna información que compartir puedes compartir tu comentario.

Solución:

Ejecutándolo en PhpStorm, pero como Xdebug se ejecuta en PHP, el comportamiento es el mismo.

Xdebug se detiene cuando las cosas están “hechas”, en las líneas en las que las cosas están “hechas”. Pueden ser llamadas a funciones, asignaciones de variables, transformaciones de datos, etc. Todos ellos tienen en común que deben ser explícitos. Las asignaciones implícitas se ignoran.

Xdebug no detiene la ejecución de los puntos de interrupción colocados “en” una acción. Es por eso que el primer punto de interrupción en su código no trabajo, y el segundo lo hará.

Ejemplo explícito e implícito:

$attributes = [                   // this is implicitly an array, no pausing execution
    'business_name' => 'DANONE'   // this is explicitly assigned a string, execution paused
];

Con algunas capturas de pantalla (el código es de Symfony 4 public/index.php, con algunas adiciones obvias – el fondo azul es la ejecución en pausa “línea actual”):

Ejemplo 1

Ejecutar claramente funciones dentro de un if() declaración – hace una pausa

ejemplo 2

Como podemos ver, los puntos de interrupción en las 3 líneas de este array. Sin embargo, el único en el que se detiene es la asignación del key/ par valor. Esto se hace explícitamente, el array en sí mismo se declara implícitamente.

ejemplo 3

Aquí declaramos explícitamente $testArray ser un array. Entonces: hace una pausa.

ejemplo 4

Esto debe estar completo, podría haberlo agregado arriba. Configuración implícita de tipo array, pero asignación explícita de key/valor.


Entonces sí.

Si hubiera colocado sus puntos de interrupción ligeramente diferentes, habrían pausado la ejecución. No detenerse en los implícitos es un comportamiento normal.


Estar Completo:

En la instalación local de Apache, tengo la siguiente configuración:

[XDEBUG]
zend_extension = C:xamppphpextphp_xdebug-2.7.1-7.3-vc15-x86_64.dll

xdebug.remote_mode = req
xdebug.remote_connect_back = 1
xdebug.default_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.max_nesting_level = 200;

Pero normalmente ejecuto esto en Docker. En el docker-compose Imagen PHP:

environment:
  PHP_XDEBUG_ENABLED: $XDEBUG_ENABLED:-0
  PHP_IDE_CONFIG: $PHP_IDE_CONFIG:-serverName=ProjectName
  XDEBUG_CONFIG: >
    idekey=PHPSTORM 
    remote_host=$XDEBUG_REMOTE_HOST_IP:-host.docker.internal
    remote_port=$XDEBUG_REMOTE_PORT:-9000
    remote_enable=1
  • (para habilitar xdebug, establezca XDEBUG_ENABLED configuración del entorno para 1 en aplicación al comenzar a usar docker-compose up)
  • (reemplace “ProjectName” con el nombre del proyecto, use ese nombre en su configuración de “servidores” en la configuración de PhpStorm para Xdebug)

y en el Dockerfile

pecl install xdebug-2.7.2 redis && 
docker-php-ext-enable xdebug redis && 
  • (asegúrese de reemplazar xdebug-2.7.2 con una versión que desee / sea compatible con su versión de PHP, compruébelo aquí)

Editar: adicional basado en los comentarios sobre la pregunta de OP.

Hay muchos informes de errores (vea esos comentarios, mire a LazyOne por encontrarlos).

La última URL que proporcionó es interesante ya que se trata de la próxima V2.8.0 (actualmente en 2.8.0beta1, no en la versión general), sobre la cual comenta en este ticket que Xdebug no detiene la ejecución en las asignaciones implícitas:

Acabo de fusionar esto en la rama maestra, que se convertirá en parte de 2.8.0. Lanzaré 2.7.2 pronto (¿esta semana, hoy ?!), y probablemente la próxima semana una versión 2.8alpha1 para que la gente pueda probar esto.

(cita de 2019-05-06 12:49 por Derick, escritor de Xdebug)

Puede echar un vistazo a la página del registro de cambios o la hoja de ruta de Xdebug.

La hoja de ruta muestra todas las funciones / correcciones que se incluirán.

Para 2.8.0, muestra que se agregará soporte para IDE para que los IDE muestren si se puede resolver o no un punto de interrupción. Su fecha de lanzamiento actual está fijada para el 30-09-2019.

Liberado

Yo también enfrenté este problema, con laravel, estoy publicando los pasos que hice para solucionar este problema Estoy usando laragon para PHP

agregué una nueva versión de php, también actualicé la ruta de PHP de los compositores (no sé si este paso es necesario, pero lo hice y señalé la última versión de PHP)

descargó xdebg.dll y lo colocó en la carpeta

configuración actualizada en php.ini

[xdebug]    
 zend_extension = D:lrgnbinphpphp-7.2.7extphp_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll
 xdebug.remote_autostart=1
 xdebug.remote_enable=1
 xdebug.remote_connect_back = 1
 ;xdebug.remote_log= D:lrgnbinlogxdebug.log

no tengo xdebug.remote_port = 9000

en launch.json


    "version": "0.2.0",
    "configurations": [
        
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        ,
        
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "$file",
            "cwd": "$fileDirname",
            "port": 9000
        
    ]

en vscode

En Preferencias -> Configuración (ctrl+,)

Agregar / actualizar:
php.validate.executablePath: "D:lrgnbinphpphp-7.2.7php.exe" (el mío estaba aquí)

Servidor reiniciado(laragon) detuvo laravel hizo una actualización del compositor en el proyecto (no estoy seguro si esta etapa requiere) comenzó el proyecto laravel nuevamente

en el navegador, abra el proyecto laravel

en vscode establece algunos puntos de freno incluso en métodos

en la sección de depuración -> Escuche XDebug

en el navegador recargó la página

si, es un golpe directo

No está disponible para romper por definido array en vscode
mi sugerencia es obtener un código if u otro, como este:

 public function testCreateWhenAllParametersAreCorrectlySpecifiedReturnsCompany()
 
•   $debug = 'true';
    $attributes = [
         'business_name' => 'DANONE'
     ];

     $address = factory(Address::class)->create();

     $company = Company::create($attributes, $address);

•    $this->assertInstanceOf(Company::class, $company);

     $this->assertDatabaseHas('companies', [
         'address_id' => $address->id,
         'business_name' => 'DANONE'
     ]);
 

y continuar con la prensa f10 botón

Acuérdate de que tienes autorización de explicar .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *