O Xdebug pode ser acionado por comandos Drush?

9

Estou com um problema nos módulos de Recursos e no perfil de instalação ao instalar o site drush si. Provavelmente, existem vários problemas relacionados na fila de problemas dos Recursos, mas nenhum com boas soluções. A parte interessante (mencionada em alguns dos problemas) é que ele funciona bem ao instalar o site através do navegador, mas falha ao instalar com drush si.

Eu tenho uma idéia do que está errado, mas preciso confirmar. A única maneira de pensar em confirmá-lo é percorrer o código com um depurador (o Xdebug é o que eu configurei). Então, é possível acionar o Xdebug a partir de um comando executado com o Drush? Especificamente, posso fazer o Xdebug entrar em ação quando corro drush si?

Chaulky
fonte

Respostas:

4

você deve se lembrar que com o drush você está (supostamente) no cli, então isso deve ajudar:

/programming/1947395/how-can-i-debug-a-php-cli-script-with-xdebug

Além disso, tente executar o comando com a opção -d (--debug) - ela deve fornecer muitas informações sobre o que está dando errado.

mojzis
fonte
Você pode adicionar algumas informações sobre como definir um ponto de interrupção no código específico do Drush / Drupal? ou seja, um número de linha em um arquivo no qual o depurador será interrompido se o drush for executado?
therobyouknow
Uma resposta para minha pergunta parece estar aqui: randyfay.com/content/… : - "se você estiver depurando a maioria das ações drush, poderá colocar um ponto de interrupção na primeira linha de drupal_bootstrap () em includes / bootstrap.inc."
therobyouknow
3

Você pode usar as funções xdebug_start_trace()e xdebug_stop_trace()XDebug para iniciar o depurador sob demanda. Verifique se você configurou o XDebug na CLI primeiro ( php -i | grep xdebug).

Em seguida, crie um novo arquivo PHP de uma linha da seguinte maneira (por exemplo, drush_xdebug_start.inc):

<?php xdebug_start_trace();

Em seguida, execute o drush como:

drush --early="$PWD"/drush_xdebug_start.inc whatever_command_you_need
kenorb
fonte
2

Eu uso o XDebug em solicitações de drush o tempo todo.

  1. Verifique se o XDebug está carregado no seu php da CLI executando php -i
  2. Verifique se o seu cliente está ouvindo conexões XDebug e na porta correta. Eu depurei com êxito usando o PHPStorm, Netbeans e Komodo IDE como clientes.
moshe weitzman
fonte
11
Você pode dar um exemplo de onde (no próprio drush ou dentro de outro código do Drupal chamado drush) um ponto de interrupção seria definido para que o xdebug quebre essa linha de código quando o drush é executado?
therobyouknow
Uma resposta para minha pergunta parece estar aqui: randyfay.com/content/… : - "se você estiver depurando a maioria das ações drush, poderá colocar um ponto de interrupção na primeira linha de drupal_bootstrap () em includes / bootstrap.inc."
therobyouknow
1

Supondo que você tenha o Xdebug configurado corretamente, é muito fácil integrar seu IDE para percorrer o código. Basta definir a variável de ambiente XDEBUG_CONFIG como "idekey = MYIDEKEY".

Facilite a configuração de um alias para ele. isto é o que eu uso no meu arquivo .alias (tcsh):

alias xdebugon 'setenv XDEBUG_CONFIG "idekey=MYIDEKEY"'
alias xdebugoff 'unsetenv XDEBUG_CONFIG'
Harry Slaughter
fonte