¿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?

selfawaresoup
fuente
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.

jou
fuente
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.

Andrew Hancox
fuente
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

oliver nadj
fuente
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 ...
outis
fuente
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
Joshua Dance
fuente
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.

usuario2970583
fuente
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
Chukky Nze
fuente
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).

adm1n
fuente