Pontos de interrupção em duas aplicações que compartilham a mesma base de código usando o Xdebug
-
21-12-2019 - |
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!
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
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.