如何获取xdebug var_dump以显示完整的对象/数组


310

我在WAMP上使用xdebug(php_xdebug-2.1.2-5.3-vc9.dll)。当我在大型对象或变量上使用时,它不会显示完整的变量。var_dump

array
'node' => 
  array
    'my_form' => 
      array
        'form' => 
          array
            ...

如果没有xdebug,它将显示预期的效果。我查看了文档,但没有找到解决方案。有谁知道我可以解决这个问题,以便xdebug var_dump显示完整的对象?


print_r将打印带有所有嵌套值的完整数组。
拉什米·in那

Answers:


603

这些是php.ini中的可配置变量:

; with sane limits
xdebug.var_display_max_depth = 10
xdebug.var_display_max_children = 256
xdebug.var_display_max_data = 1024 


; with no limits
; (maximum nesting is 1023)
xdebug.var_display_max_depth = -1 
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1 

当然,它们也可以在运行时通过进行设置ini_set(),如果您不想修改php.ini并重新启动Web服务器,但需要快速深入地进行检查,则很有用。

ini_set('xdebug.var_display_max_depth', '10');
ini_set('xdebug.var_display_max_children', '256');
ini_set('xdebug.var_display_max_data', '1024');

Xdebug设置在官方文档中进行了说明


19
我认为,如果您实际上希望从您的display_max_depthvar_dump
Ben Harold

2
@BenHarold那么您会推荐什么设置?
Anriëtte迈伯勒

6
@AnriëtteMyburgh确实取决于您的代码。非复杂数组或JSON可能很好,如果5-10可能已经足够了,但是如果您想深入研究Symfony框架对象,则可能没有局限性更好。没有建议是万能的。
Michael Berkowski

3
在过去的六个月中,我已经多次访问了这个答案十次。谢谢迈克尔·伯科夫斯基(Michael Berkowski),我永远背负着你的债。
林肯·伯根森

2
@LincolnBergeson我也必须一直自己查找它。
Michael Berkowski

38

我知道这是一篇非常老的文章,但我认为这可能仍然有用。

如果您愿意阅读json格式,则可以将var_dump替换为:

return json_encode($myvar);

我一直在使用它来帮助解决我正在构建的具有一些深层嵌套数组的服务。这将返回数组的每个级别,而不会截断任何内容或要求您更改php.ini文件。

另外,由于json_encoded数据是字符串,因此您可以轻松地将其写入错误日志

error_log(json_encode($myvar));

在每种情况下,它可能都不是最佳选择,但这是一个选择!


12
我喜欢这个答案。您可能还具有类似以下内容的漂亮html输出:return'<pre>'。json_encode($ myvar,JSON_PRETTY_PRINT)。'</ pre>';;
大卫

7
请记住,所有变量可能都不是json_encodeable。未实现jsonserializable接口的对象将仅返回一个空数组“ {}”
KristianSandström2015年

2
同样值得注意的是,json_encoding某些内容无法显示类型,因此识别某些内容是否匹配更加困难。
SEoF

13

或者您可以使用替代方法:

https://github.com/kint-php/kint

它的设置为零,并且比Xdebug的var_dump具有更多的功能。要使用Kint绕过飞行中的嵌套限制,只需使用

 +d( $variable ); // append `+` to the dump call

12

我知道这很晚了,但可能有用:

echo "<pre>";
print_r($array);
echo "</pre>";

21
print_r()不是对的var_dump的替代品。
AnrDaemon

很棒的答案。谢谢。
PHPst

@AnrDaemon认真吗?
PHPst

var_dump([false]); print_r([false]);
AnrDaemon

我知道这很晚,但是-根据您的需要,print_r()绝对可以替代var_dump()!我几乎不再使用var_dump()了,因为我经常想显示数组的结构,而IMO print_r()则比var_dump()好得多。
world上的bestprogrammer


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.