如何让 xdebug var_dump 显示完整的对象/数组

Posted

技术标签:

【中文标题】如何让 xdebug var_dump 显示完整的对象/数组【英文标题】:How to get xdebug var_dump to show full object/array 【发布时间】:2012-04-17 09:58:27 【问题描述】:

我在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 显示 full 对象?

【问题讨论】:

print_r 将打印包含所有嵌套值的完整数组。 【参考方案1】:

这些是 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 并重新启动您的网络服务器但需要快速更深入地检查某些内容,则很有用。

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 settings are explained in the official documentation.

【讨论】:

我认为如果您真的希望从您的 var_dump 获得任何信息,那么 5 的 display_max_depth理智的 @BenHarold 那么你会推荐什么设置? @AnriëtteMyburgh 这真的取决于你的代码。非复杂数组或 JSON 可能没问题, 5 - 10 可能绰绰有余,但如果你想深入研究 Symfony 框架对象,你最好没有限制。没有任何建议是万能的。 在过去的六个月里,我访问了这个答案十多次。谢谢你 Michael Berkowski,我永远欠你的债。 @LincolnBergeson 我自己也必须一直查找它。【参考方案2】:

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

如果您对阅读 json 格式感到满意,可以将 var_dump 替换为:

return json_encode($myvar);

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

另外,由于 json_encoded 数据是一个字符串,这意味着您可以轻松地将其写入错误日志

error_log(json_encode($myvar));

这可能不是每种情况的最佳选择,但它是一种选择!

【讨论】:

我喜欢这个答案。您可能还会有类似这样的漂亮 html 输出:return '
'.json_encode($myvar, JSON_PRETTY_PRINT).'
';
请记住,并非所有变量都是 json_encodeable。没有实现 jsonserializable 接口的对象只会返回一个空数组“” 另外值得注意的是,json_encoding 不会向您显示类型,因此更难以识别某些内容是否匹配。 这是一个有趣的答案。原创!【参考方案3】:

我知道这已经晚了,但它可能会有一些用处:

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

【讨论】:

print_r() 不是 var_dump 的替代品。 很棒的答案。谢谢。 @AnrDaemon 认真的吗? var_dump([false]); print_r([false]); 我知道这已经晚了,但是 - print_r() 绝对可以替代 var_dump() 取决于你想要什么!我几乎不再使用 var_dump(),因为我经常想显示数组的结构,而 IMO print_r() 显示的效果比 var_dump() 好得多。【参考方案4】:

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

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

它在零设置下工作,并且比 Xdebug 的 var_dump 具有更多的功能。要使用 Sage 即时绕过嵌套限制,只需使用

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

【讨论】:

【参考方案5】:

结帐Xdebbug's var_dump settings,尤其是这些设置的值:

xdebug.var_display_max_children
xdebug.var_display_max_data
xdebug.var_display_max_depth

【讨论】:

【参考方案6】:

我想推荐var_export($array) - 它不显示类型,但它会生成可以在代码中使用的语法:)

【讨论】:

【参考方案7】:

有时文件中的 var_export 非常有用。

file_put_contents(__DIR__.'/temp.txt', var_export($var, true), FILE_APPEND);

例如,如果您在生产服务器上调试某些东西。

【讨论】:

以上是关于如何让 xdebug var_dump 显示完整的对象/数组的主要内容,如果未能解决你的问题,请参考以下文章

Xdebug 不适用于 var_dump()

var_dump() 格式化输出 | 显示不全

xdebug 是不是美化了 var_dump?

Xdebug的安装配置和使用

wamp下var_dump()相关问题

Phpstorm+Xdebug断点调试PHP