为什么 PHP 调试器找不到此对象更改?



我正在尝试跟踪对PHP对象进行更改的位置,并且调试器无法单步执行发生更改的代码。

我正在跟踪具有三个赋值的构造函数。

public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
$this->definition = $definition;
$this->parent = $parent;
$this->name = $name;
}

完成这三个赋值中的第二个后,第四个属性(由层次结构中的另一个类定义)已从空数组更改为具有单个元素的数组。该对象具有魔法获取者和设置器,但此处不会调用它们。调试器不会单步执行对parent属性的赋值,也不会在__set()上命中断点。最后一点是合适的,因为这些魔术方法只对未声明或无法访问的属性启动,并且parent属性声明为构造函数上方的protected,并且对象始终可以访问自己的属性。在那些调用魔术方法(PHP 文档的古朴语言中的"覆盖")的情况下(在软件中的其他地方),调试器很乐意直接介入。

调试器怎么可能无法单步执行明显比简单赋值做更多工作的语句?

我在 Ubuntu 18.04.1 上运行 Apache 2.4.29 下的 PHP 7.2.10,使用 Xdebug 2.6.0 在 VSCode 1.33.1 中进行调试。正在调试的代码来自Drupal 8.7.0-dev。

原来是VSCode中的一个错误。

https://github.com/felixfbecker/vscode-php-debug/issues/355

只是去显示,你不能总是信任调试器。 😉

使用 PhpStorm 而不是 VSCode 进行调试是解决方案。

最新更新