phpStorm / Xdebug无法显示show子对象数组

时间:2014-04-23 17:27:34

标签: xdebug phpstorm

我正在尝试调试此代码:

  public function removeBlankLines() {
    $this->qp->find('br');
  } // <-- break point is here

当我深入查看$ this对象(使用phpStorm)时,我看不到我感兴趣的子数组。它只显示“无法获取属性”截图:

phpStorm debug pane screenshot

我正在“侦听调试连接”功能。我正在从命令行运行脚本。 PHP版本:

[bwood@mbp ~]$ php -v
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

也许相关:http://bugs.xdebug.org/view.php?id=996

5 个答案:

答案 0 :(得分:10)

http://bugs.xdebug.org/view.php?id=686

所有关于如何实施此类(SplObjectStorageArrayObject等)内部

  

这是因为SplObjectStorage类的对象不是用户登陆PHP对象,而是特殊的超级内部PHP对象。许多其他内部PHP类也会发生类似的情况。

AFAIK在PhpStorm方面无法做任何事情,直到xdebug能够“支持”它们。


更新:前面提到的xdebug票证已经解决了 xdebug 2.3.3 很久以前(最新的稳定xdebug版本是2.4.1)应该可以在调试器中查看这些类。

答案 1 :(得分:6)

  • 将xdebug升级到版本2.3.3,它解决了问题 http://bugs.xdebug.org/view.php?id=686#c3116
  • 如果您正在运行流浪汉,请确保在升级中升级xdebug 流浪虚拟机。
  • 可以从http://xdebug.org/wizard.php

    获取升级说明

    如果无法升级,您可以将内容转储为最后一个 采取。

    在评估表达式中,您可以尝试类似

    的内容

    file_put_contents(&#39; dump.txt&#39;,var_export($ requiredVariable,true));

答案 2 :(得分:1)

如果您尝试检查的属性是从父类继承而在当前范围内不可见,则还会出现 ! can not get property 错误。

实施例

xDebug将注释相关属性,如:

$childClass = {path\to\child\Child}
    *path\to\class\Parent*property = {path\to\property\Property}

其中:

  • Parent是基类
  • Child是扩展类
  • property是在Parent
  • 上定义的继承属性

请注意标识此案例的星号*,并表示“在当前范围内不可见”。

解决方案:

启用调试的快速解决方案是将父级属性的可见性设置为public

class Parent {
    public $property;  // instead of private or protected
}

class Child extends Parent{
    // You can now inspect parent::$property for instances of Child 
}

请记住在完成测试后将属性可见性设置回正确的值。

答案 3 :(得分:0)

  

Linux LDME2
  PHP的 5.6.30-0 + deb8u1
  xdebug v 2.5.3

我试过这个容器。

php -i | xclip -selection clipboard

接受并遵循说明

https://xdebug.org/wizard.php

我得到了这个结果(无法获得属性

  

sha256sum~ / xdebug-from-src / xdebug-2.5.3 / modules / xdebug.so       afbb70941387ff1e191433d2a09ff42a393caac773194c0e9004b844a0f3d73b

我找到了解决这个问题的方法。而是从源代码构建,需要从pecl安装

sudo pecl install xdebug
  

sha256sum /usr/lib/php5/20131226/xdebug.so   b82f2a4ab101323d3600a79223143e2eefe941d404c88af2bd7434fd47caaf13

php -v
  

PHP 5.6.30-0 + deb8u1(cli)(建于2017年2月8日08:50:21)版权所有(c)   1997-2016 PHP Group Zend Engine v2.6.0,版权所有(c)1998-2016   Zend Technologies       Zend Technologies的Zend OPcache v7.0.6-dev,Copyright(c)1999-2016       与Xdebug v2.5.3,版权所有(c)2002-2017,作者Derick Rethans

答案 4 :(得分:-1)

我在Yii框架中有类似的问题。 ActiveRecord对象在调试器监视中未显示属性(无法获取属性)。

但是有一个简单的解决方法,在调试器监视中,使用$this->attributes代替$this

如果您知道内部对象的结构以及所要查找的内容,我认为这种方法可以在许多类似的情况下提供帮助。如果$this->something仍然无法正常工作,请尝试使用(array)$this-> something将其强制转换为数组。