将Xdebug与IntelliJ和Vagrant一起使用时,我的行为非常奇怪。
我有一个Vagrant框,其中包含nginx和两个定义的服务器。当我通过浏览器发出Web请求时,实际上会调用正在监听服务器名称“ a”的服务器。该服务器调用另一个正在监听服务器名“ b”的nginx服务器(在同一台vbox计算机上)。
我想调试服务器名称“ b”中的某些代码。
所以我无所事事的xdebug.ini看起来像下面的
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.idekey=PHPSTORM
xdebug.remote_log=/tmp/xdebug.log
xdebug.remote_host=10.10.0.1
xdebug.remote_autostart=0
xdebug.remote_port=9000
xdebug.max_nesting_level=1000
其中10.10.0.1是我的主机的IP。
在IntelliJ中,我还定义了两个远程调试配置,一个监听服务器名“ a”,另一个监听“ b”。我还为两者设置了源代码映射。
现在,如果我只是通过Web请求而不通过浏览器进行调试会话,就会调用服务器“ a”,该服务器正在对“ b”进行调用并返回,而我得到的响应没有任何问题。
如果我现在从服务器“ a”的调试会话开始,并在PHP代码中为“ a”设置断点,那么一切都会按预期进行。 IntelliJ停在正确的行,如果我释放断点,则请求在浏览器中正确完成。
现在奇怪的行为...
如果我调试服务器“ b”的某些代码,则整个请求将超时,而不会在“ b”的源代码的断点处停止。看来这似乎陷入了僵局。
Xdebug日志首先注册到服务器“ a”的连接,然后说“已成功连接到IntelliJ”。由于该服务器“ a”正在向“ b”发出请求,因此另一个Xdebug会话已启动,并且此处的日志也显示“已成功连接到IntelliJ”。
但是从现在开始,整个请求都挂断了直到超时。但是,如果发生超时,则该通道现在似乎已“释放”,并且突然命中了来自服务器“ b”的源代码的断点。 看来他们互相阻碍了,我不知道为什么。 在IntelliJ中,我已经将同时连接设置为4。
这感觉像是IntelliJ问题,但我别无所求。
有人有想法吗? xdebug中是否有用于“多个”连接的配置? 我能以某种方式避免Xdebug连接到我的IntelliJ来请求服务器“ a”,而只对服务器“ b”进行连接吗?