Sea*_*ean 2 php xdebug phpstorm
我正在使用 PhpStorm 版本 #PS-222.3345.135 的 Ubuntu 18.04 系统。我使用的是 PHP 7.4.20 和 Xdebug 2.9.8。
首先,当我没有在网络请求上运行 Xdebug 时,它们工作得很好。当我尝试使用 Xdebug 单步执行时,方法会过早退出,如下面的屏幕截图所示:
第一张截图:
执行在该launch()方法的第一行。因此,按“Step Over”按钮应将执行带到第 112 行。($this->_state->setAreaCode($areaCode));相反,按“Step Over”会提前退出该launch()方法并将执行线程带回该Bootstrap::run()方法,如下所示:
请注意,局部范围内没有$response变量run(),因为该launch()方法由于过早退出而不允许返回值。再次按 Step Over 将导致抛出异常$response->sendResponse(),如下图所示:
总而言之,这里的问题是 Xdebug 没有正确单步执行代码。这个问题直到上周才开始出现,并且我的项目路径映射与之前相同。
多个 PhpStorm 项目都发生这种情况,而不仅仅是这一个代码库。不过,我确实有一个 PhpStorm 项目(代码库要小得多),其中单步执行代码工作正常(结果我将 PhpStorm 内存限制升级到 2GB,但没有解决任何问题)。
有谁知道为什么会发生这种情况?
这是 PhpStorm 2022.2 问题(WI-67891票证)。
找到并修复了错误的原因。修复将在下一次小更新中提供。以下是该问题的技术摘要,供那些好奇发生了什么的人参考:
Xdebug 有一个错误,基本上是
step_over通过传递无效eval命令来中断进一步的命令。此错误在 3.1 中已修复,但存在于所有旧版本中。在 2022.2 中,我们实现了功能WI-56517,该功能
__toString在调试面板中显示对象的表示。此功能是通过eval((string)expression)在调试会话启动时传递命令来实现的事实证明,该命令碰巧产生了许多无效输入:
- 来自父类的私有属性。Xdebug 以不适合简单评估的格式返回此类属性https://github.com/xdebug/xdebug/blob/5af18430eb0b2c9574e903e6a9b9ef40c0ea7296/src/lib/var_export_xml.c#L441
::而不是$this静态方法的情况(问题WI-67023)这些因素综合起来就导致了破碎
step_over。这两种情况均已修复,并将在下一次小更新中提供。对于给您带来的不便,我们深表歉意,并感谢您报告该问题。
上述WI-67891票证标记为 2022 年 2 月 1 日固定。您现在可以尝试 2022.2.1 预览版。
同时有一些报告称,在某些场景(尚未涵盖的情况)中,调试仍然无法像以前的版本一样工作。遗憾的是,有更多无用的“我也是”评论,而不是“这是一个仍然无法工作的代码示例”(因为它需要时间来完成,看看可能导致它的原因,能够发现其中的差异设置/环境等)。
目前的解决方案:
Settings/Preferences | PHP | Debug | Evaluation | Enable '__toString' object view直至确认正确解决。不要忘记将其恢复(此功能似乎很方便调试时快速浏览)。| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |