PHPUnit在xdebug活动和侦听时运行时冻结

时间:2015-10-20 06:59:59

标签: php debugging phpunit phpstorm xdebug

我从昨天起就陷入了困境,一个完全奇怪的问题无处不在。 我在Symfony项目中使用PHPStorm。 PHPUnit测试正常运行。如果我在IDE中激活侦听器连接的监听模式并运行测试,phpunit会冻结,并且IDE会在30秒后自动停止。我认为它与ide无关。如果我使用MacGDBp,我会遇到同样的问题。我已经检查了OSX 10.11上所有防火墙相关的东西,并在新的Brew环境中安装了php。 PHP是来自本地OSX和Brew的版本5.6。

我没有调试器就相当盲目:-o

3 个答案:

答案 0 :(得分:0)

确保您还没有在后台运行其他调试会话。

答案 1 :(得分:0)

Xdebug一次只能监听一个正在运行的PHP进程。通常有两种可能性。

1)正如@adrianGW所说,调试器可能还有另一个进程。

2)您的程序尝试加载另一个PHP进程,并且该进程在xdebug释放当前线程之前无法启动。这很常见,PHPunit将在自己的线程中运行测试,这样它们就不会让对方陷入困境。或者您正在应用程序中向同一服务器上的php脚本发出http请求,并且第二个请求正在等待第一个请求完成,因此您将被锁定,直到第一个脚本时间为止

PHPstorm中有两个修复:

1)您可以将Max Simultaneous Conections更改为大于1的数字

2)您可以启用Ignore external connections through unregistered servers configurations,但这仅在其他线程的原因类似于对同一服务器上的另一个域的请求时才有效,xdebug可以将其区分为未注册的服务器。

答案 2 :(得分:0)

对我来说,原因是@runTestsInSeparateProcesses

以下是症状:当我打开Netbeans中的调试然后运行export XDEBUG_CONFIG="idekey=netbeans-xdebug remote_connect_back=0 remote_host=10.0.2.2"然后phpunit tests/Unit/MarkAsScheduledUnitTest.php --filter=testHandleExceptionWithMocking时,它只输出“Sebastian Bergmann和贡献者的PHPUnit 7.1.2”。还有一个闪烁的光标并挂在那里。当我进入Netbeans并退出调试时,然后运行phpunit测试。

只要我运行一个测试或测试类(而不是整套测试),解决方案就会暂时删除@runTestsInSeparateProcesses

https://stackoverflow.com/a/37464247/470749解释了为什么我一直在使用@runTestsInSeparateProcesses

Xdebug breakpoints always work except when using @runTestsInSeparateProcesses?让我了解如何在不暂时删除@runTestsInSeparateProcesses的情况下更轻松地运行单个测试。