¿Cómo activar el generador de perfiles XDebug para un script PHP de línea de comando?


194

XDebug ofrece la directiva de configuración "xdebug.profiler_enable_trigger" que permite activar la generación de perfiles pasando el parámetro GET o POST "XDEBUG_PROFILE" cuando se llama a un script a través de HTTP. Esto es útil si no desea crear perfiles para TODOS sus scripts, sino solo para algunos casos especiales sin cambiar siempre su configuración de PHP.

¿Hay alguna manera de lograr el mismo comportamiento para los programas PHP de línea de comandos? Traté de pasar el "XDEBUG_PROFILE" como argumento de línea de comando pero no funcionó.

En general, el perfil de línea de comandos PHP funciona bien, pero me gustaría tener la misma flexibilidad por llamada que con un navegador y un servidor HTTP.

¿Alguna sugerencia?


Lo siento, también estoy intentando esto pero no lo entiendo. ¿Qué debería estar en el parámetro "XDEBUG_PROFILE"?
Andresch Serj

No importa qué hay en el parámetro siempre que esté presente.
selfawaresoup

La falta de soporte para una variable de entorno XDEBUG_PROFILE es el error 413 en el rastreador de errores XDebug.
outis

Respuestas:


257

Puede pasar ajustes INI con la -dbandera: php -d xdebug.profiler_enable=On script.php.


39
En los sistemas basados en * nix, puede hacer esto un poco más fácil de usar mediante la creación de un alias, tales como: alias phpp="php -d xdebug.profiler_enable=1". De esa manera, cuando no desee crear un perfil, simplemente use phpy cuando lo haga phpp.
JC Yamokoski

14
Tenía que especificar el directorio que quería la salida de perfiles se salve en la así, por lo que este woked para mí: alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Eso siempre almacena la salida de depuración en su directorio de trabajo actual.
Lars Nyström

Sí, estoy bajo Eclipse y XAMPP en el entorno Win7. Funciona.
gouchaoer

44
En Windows, puede crear en su directorio PATH un phpp.cmdarchivo que contenga y php -d xdebug.profiler_enable=On %*luego simplemente puede ejecutarlo phpp <args>.
Gras Double

43

Tengo esto trabajando en Ubuntu / Netbeans por:

  • copiando las líneas de configuración de xdebug del archivo /etc/php5/apache2/php.ini en /etc/php5/cli/php.ini
  • configurando una variable de entorno con el nombre de la sesión de depuración (puede obtener esto de la cadena de consulta en la url de la página que inicia netbeans cuando comienza a depurar) el comando es: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Entonces se trata simplemente de iniciar la depuración en netbeans y hacer "php myscript.php" en la línea de comando.


2
Nota: Una vez que haya terminado, si desea mantener su depurador escuchando y no activarlo con un comando PHP, puede usar: "unset XDEBUG_CONFIG".
Dan LaManna

Esto realmente funciona para mí, mientras que la respuesta anterior no es ;-)
Jonathan Liuti

44
Esto se trata de depurar (recorrer el guión). La pregunta se refería a la creación de perfiles (análisis del rendimiento del script, qué funciones llevan mucho tiempo, etc.)
Matthew Flaschen

32

con PhpStorm en un servidor web remoto, uso este comando:

XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=server_name" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` myscript.php

donde se server_nameencuentra el nombre del servidor en la configuración del proyecto PhpStorm


55
agregué esto a .bash_aliases alias xphp="XDEBUG_CONFIG="idekey=PHPSTORM" PHP_IDE_CONFIG="serverName=example.com" php -d memory_limit=1G -d xdebug.remote_host=echo $ SSH_CLIENT | cortar -d \ "= \" -f 2 | awk '{print $ 1}' "así que cuando quiero depurar uso xphp en lugar de php
oliver nadj

18

Como se describe en la página de depuración remota de Xdebug , la creación de perfiles también se puede habilitar a través de la XDEBUG_CONFIGvariable de entorno al incluir una directiva "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...

Esta debería ser la respuesta aceptada, ya que es el método más accesible. El binario de PHP puede estar envuelto, puede establecerse como intérprete #! / X / php en lugares que no desea tocar. Usando la variable env se puede habilitar selectivamente
John

11

Proceso similar pero diferente para que funcione con Netbeans mientras se desarrolla en una VM.

Debe pasar la bandera habilitada remotamente, la bandera de inicio automático, la bandera ide y el nombre de su host remoto.

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=netbeans-xdebug -dxdebug.remote_host=NAME.OF.HOST script.php

4

Creé un script de shell para manejar la depuración del cliente.

nombre del script: phpdebug

#!/usr/bin/ksh
php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $*

Coloqué este script /usr/biny le di permisos de ejecución.

El script toma los argumentos pasados ​​a phpdebug y llama a php con los argumentos xdebug y agrega los argumentos pasados ​​al script de shell, el $ * al final.


Sí, en mi caso de todos modos, todo lo que necesitaba era agregar la configuración INI para mi host remoto. Eso fue todo lo que se requirió para depurar mi IDE desde un comando CLI de PHP.
Spencer Williams

En realidad, también necesitaba establecer la XDEBUG_CONFIGvariable de entorno. Solo eso y la xdebug.remote_hostconfiguración lo hizo funcionar.
Spencer Williams

2

En PhpStorm 7 usando WAMP, conseguí que esto funcionara copiando mi configuración de xdebug que ya funcionaba de C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini a la sección xdebug de C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Luego ejecuté mi script así:

php -d xdebug.idekey=PHPSTORM script.php

Esto incluso funcionó para depurar scripts artesanales laravel

php -d xdebug.idekey=PHPSTORM artisan db:seed --force

0

Documentación de Jetbrains

Para iniciar la secuencia de comandos con la depuración utilizando modificadores de línea de comando PHP Establezca una variable de entorno que le diga a XDebug que se conecte a IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Aquí idekey debe tener un valor aleatorio.

Inicie PHP con las siguientes opciones de línea de comandos:

php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 -dxdebug.remote_connect_back=0 path/to/script.php

Puede usar 10.0.2.2 en lugar de 127.0.0.1 con Vagrant (consulte la pregunta SO relacionada).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.