Pontos de interrupção em duas aplicações que compartilham a mesma base de código usando o Xdebug

StackOverflow https://stackoverflow.com//questions/24022209

Pergunta

Eu setup Xdebug em um local Vagabundo instância em execução do Ubuntu.Ele funciona como o esperado e pode configurar pontos de interrupção em meu aplicativo.

Eu tenho um cenário onde o aplicativo faz uma solicitação para um API interna.A API interna está no mesmo servidor, e a mesma base de código.

Árvore de ilustração

codebase/
  app/
    root
  api/
    root

O aplicativo é acessível como https://local.myapplication.com e a API é acessível localmente como http://local.api.myapplication.com).

Se eu, agora, definir um ponto de interrupção no código para a API e, em seguida, visite https://local.myapplication.com/some/action/that/triggers/the/api/code o ponto de interrupção só é acionado se eu não inicializar o Xdebug sessão para a primeira aplicação, por exemplo, eu não definir o XDEBUG_SESSION_START parâmetro de consulta.Se definido, o ponto de interrupção é ignorado.

Há uma certa desvantagem.Se eu tenho um ponto de interrupção na aplicação e a API, eu não posso disparar no momento.Eu pode desencadear a aplicação de pontos de interrupção ou a API de pontos de interrupção.

Eu estou usando Sublime Texto 3 com o plugin https://github.com/martomo/SublimeTextXdebug.Meu Xdebug definições php.ini são:

zend_extension="/usr/lib/php5/20090626/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=192.168.3.1
xdebug.remote_port=9000
xdebug.remote_log="/tmp/php5-xdebug.log"

É isso tem conserto?Respostas/comentários são bem-vindos!

Foi útil?

Solução

Duas escolhas.Se a primeira (a mais fácil) não funciona, a segunda certamente será.

1 - Inicie um novo Xdebug sessão para cada solicitação http.

Em php.ini, adicione o seguinte ao seu xdebug configurações:

xdebug.remote_autostart = 1

Ver documentação aqui

2 - Executar dois Xdebug sessões simultaneamente.

Você precisará ter duas instâncias separadas do seu IDE/editor de texto ouvindo o xdebug - cada um em uma porta diferente.Você pode definir ambas as instâncias editar o mesmo projeto, enquanto seus xdebug serviço de escuta em portas diferentes.

Por exemplo:

  • A sua "aplicação" -> porta 9000
  • O seu "API interna" -> porta 9001

Para fazer o seu "API interna" executar xdebug na porta 9001, você pode simplesmente fazer o seguinte, no início da sua "interno API de script":

ini_set('xdebug.remote_port', '9001');

Outras dicas

Use conditional breakpoints .Você pode fazê-los depender de qualquer código PHP.Por exemplo.Defina uma constante para cada ponto de entrada e verificá-lo.Ou verifique o URL de solicitação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top