Como disparar o criador de perfil XDebug para um script PHP de linha de comando?

194

O XDebug oferece a diretiva de configuração "xdebug.profiler_enable_trigger" que permite ativar a criação de perfil passando o parâmetro GET ou POST "XDEBUG_PROFILE" ao chamar um script via HTTP. Isso é útil se você não deseja criar um perfil para TODOS os seus scripts, mas apenas para alguns casos especiais sem sempre alterar sua configuração do PHP.

Existe uma maneira de obter o mesmo comportamento para programas PHP de linha de comando? Tentei passar o "XDEBUG_PROFILE" como um argumento de linha de comando, mas não funcionou.

Em geral, a linha de comando de criação de perfil PHP funciona bem, mas eu gostaria de ter a mesma flexibilidade por chamada de um navegador e servidor HTTP.

Alguma sugestão?

selfawaresoup
fonte
Desculpe, eu também estou tentando isso, mas eu não entendo. O que deve estar no parâmetro "XDEBUG_PROFILE"?
Andresch Serj 11/11
Não importa o que está no Parâmetro, desde que esteja presente.
precisa
A falta de suporte para uma variável de ambiente XDEBUG_PROFILE é o bug 413 no rastreador de erros do XDebug.
Outis

Respostas:

257

Você pode passar configurações INI com a -dbandeira: php -d xdebug.profiler_enable=On script.php.

jou
fonte
39
Em sistemas baseados * nix, você pode fazer isso um pouco mais fácil de usar, criando um alias, tais como: alias phpp="php -d xdebug.profiler_enable=1". Dessa forma, quando você não deseja criar um perfil, basta usar phpe quando usar phpp.
JC Yamokoski
14
Eu tive que especificar qual diretório eu queria a saída profiler para ser salvo no bem, de modo que este woked para mim: alias xphp="php -d xdebug.profiler_enable=On -d xdebug.profiler_output_dir=.". Isso sempre armazena a saída de depuração no seu diretório de trabalho atual.
Lars Nyström
Sim, estou no Eclipse e no XAMPP no ambiente Win7. Funciona.
Gouchaoer
4
No Windows, você pode criar no seu diretório PATH um phpp.cmdarquivo, contendo php -d xdebug.profiler_enable=On %*então você pode simplesmente executar phpp <args>.
Gras Double
43

Eu consegui isso trabalhando no Ubuntu / Netbeans por:

  • copiando as linhas de configuração do xdebug do arquivo /etc/php5/apache2/php.ini para /etc/php5/cli/php.ini
  • definindo uma variável de ambiente com o nome da sessão de depuração (você pode obtê-la na string de consulta no URL da página que o netbeans inicia quando você inicia a depuração) o comando é: export XDEBUG_CONFIG = "idekey = netbeans-xdebug"

Então é simplesmente um caso de iniciar a depuração no netbeans e executar "php myscript.php" na linha de comando.

Andrew Hancox
fonte
2
Nota: Depois de terminar, se você deseja manter seu depurador escutando e não acioná-lo com um comando PHP, você pode simplesmente usar: "unset XDEBUG_CONFIG".
Dan LaManna 16/01/12
Este é realmente trabalhar para mim enquanto a resposta acima não é ;-)
Jonathan Liuti
4
É sobre depuração (percorrendo o script). A pergunta era sobre profiling (análise de desempenho do script, o que funções levar um longo tempo, etc.)
Matthew Flaschen
32

com o PhpStorm no servidor remoto, eu 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

onde server_namesignifica o nome do servidor na conifugação do projeto PhpStorm

oliver nadj
fonte
5
eu adicionei isso ao .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 | cut -d \ "= \" -f 2 | awk '{print $ 1}' "então quando eu quero depurar eu uso xphp em vez de php
oliver Nadj
18

Conforme descrito na página Xdebug Remote Debugging , a criação de perfil também pode ser ativada através da XDEBUG_CONFIGvariável de ambiente, incluindo uma diretiva "profile_enable = 1":

XDEBUG_CONFIG="profiler_enable=1" php ...
fora
fonte
Essa deve ser a resposta aceita, pois é o método mais acessível. O binário PHP pode estar quebrado, pode ser definido como intérprete #! / X / php em locais que você não deseja tocar. Usando a variável env pode ser seletivamente ativado
John
11

Processo semelhante, mas diferente, para que ele funcione com o Netbeans durante o desenvolvimento em uma VM.

É necessário passar o sinalizador ativado remotamente, o sinalizador de início automático, o sinalizador ide e o nome do seu 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
fonte
4

Eu criei um script de shell para lidar com a depuração do cliente.

nome do script: phpdebug

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

Eu coloquei esse script em /usr/bin e dei permissões de execução.

O script pega os argumentos passados ​​no phpdebug e chama php com os argumentos xdebug e anexa os argumentos passados ​​no script shell, o $ * no final.

user2970583
fonte
Sim, de qualquer maneira, no meu caso, tudo o que eu precisava era adicionar a configuração INI para o meu host remoto. Era tudo o que era necessário para depurar no meu IDE a partir de um comando da CLI do PHP.
Spencer Williams
Na verdade, eu também precisava definir a XDEBUG_CONFIGvariável de ambiente. Apenas isso e a xdebug.remote_hostconfiguração fizeram funcionar.
Spencer Williams
2

No PhpStorm 7 usando WAMP, consegui que isso funcionasse, copiando minhas configurações de xdebug já existentes de C: \ wamp \ bin \ apache \ apache2.2.22 \ bin \ php.ini para a seção xdebug de C: \ wamp \ bin \ php \ phpX.YZ \ php.ini. Então eu executei meu script assim:

php -d xdebug.idekey=PHPSTORM script.php

Isso até funcionou para depurar scripts de artesãos laravel

php -d xdebug.idekey=PHPSTORM artisan db:seed --force
Chukky Nze
fonte
0

Documentação de Jetbrains

Para iniciar o script com depuração usando opções de linha de comando PHP Defina uma variável de ambiente que informa ao XDebug para conectar-se ao IDE:

Windows / MacOS / Linux

export XDEBUG_CONFIG="idekey=123"  

Aqui idekey deve ter um valor aleatório.

Inicie o PHP com as seguintes opções de linha de comando:

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

Você pode usar 10.0.2.2 em vez de 127.0.0.1 com o Vagrant (consulte a pergunta SO relacionada).

adm1n
fonte