Php 在不调用writeClose()的情况下,使用xdebug调试Magento 2很困难

Php 在不调用writeClose()的情况下,使用xdebug调试Magento 2很困难,php,apache,magento2,xdebug,fastcgi,Php,Apache,Magento2,Xdebug,Fastcgi,正如标题所示,在某些情况下,我单步执行Magento 2代码,只是让它转到Magento\Framework\Session\SessionManager::writeClose(),从而调用Session\u write\u close(),并立即终止应用程序。调用堆栈实际上是空的,所以我看不出是什么在调用它。但是,如果我插入一个断点并从那里继续,它将加载网站,就像什么都没有发生一样 这似乎只发生在Magento 2网站上,它会突然以这种方式终止,但是我不确定这是否是xdebug、Apache

正如标题所示,在某些情况下,我单步执行Magento 2代码,只是让它转到
Magento\Framework\Session\SessionManager::writeClose()
,从而调用
Session\u write\u close()
,并立即终止应用程序。调用堆栈实际上是空的,所以我看不出是什么在调用它。但是,如果我插入一个断点并从那里继续,它将加载网站,就像什么都没有发生一样

这似乎只发生在Magento 2网站上,它会突然以这种方式终止,但是我不确定这是否是xdebug、Apache或PHP-FPM的问题

调用writeClose有什么原因吗?如何防止调试时再次发生这种情况

系统详细信息:
  • Linux Ubuntu 18.04.2 LTS(在WSL中)
  • PHP版本:7.0.33
  • 服务器API:FPM/FastCGI
  • xdebug版本:2.8.1

如果您需要任何其他信息,请留下评论,我将相应更新:-)

当您遇到异常时,将调用writeClose

没有办法阻止它

解决方法是通过深入调试找到异常的位置


当您调试时,然后尝试更多地使用F7而不是按F8键,您将完成所有功能并获得异常。然后通过异常消息查看根本原因。

调试会话如何链接到用户会话?我认为唯一可能的情况是,当您的代码中触发了Magento中的错误处理程序,从而有效地优雅地终止了应用程序,并在该处理程序中调用上述函数。不幸的是,这可能像“未捕获错误:无法访问受保护的属性”错误一样简单,但是,如果断点设置在导致上述错误的位置之后,它将很好地执行该部分。我已经有一段时间没有遇到这个问题了,但我只是又一次遇到它,所以为什么在快速的谷歌搜索之后我又回到了这里!这可能是内存问题,但如果我找到了真正的原因,我会相应地更新。