【问题标题】:Why can't the PHP debugger find this object change?为什么 PHP 调试器找不到这个对象的变化?
【发布时间】:2024-05-02 15:30:02
【问题描述】:

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

我正在通过具有三个分配的构造函数进行跟踪。

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

完成这三个赋值中的第二个之后,第四个属性(由层次结构中的另一个类定义)已从空数组更改为具有单个元素的数组。该对象具有魔术 getter 和 setter,但它们不会在这里被调用。调试器不会单步执行对parent 属性的赋值,也不会在__set() 上遇到断点。最后一点是合适的,因为这些魔术方法只对未声明或不可访问的属性起作用,并且parent 属性在构造函数上方被声明为protected,并且对象始终可以访问其自己的属性。在那些调用魔法方法(PHP 文档的古朴语言中的“覆盖”) 的情况下(在软件的其他地方),调试器会愉快地介入。

调试器怎么可能无法进入一个明显比简单赋值做更多工作的语句?

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

【问题讨论】:

    标签: php object debugging properties


    【解决方案1】:

    原来是 VSCode 中的一个错误。

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

    只是展示一下,你不能总是信任调试器。 ?

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

    【讨论】:

      最近更新 更多