ChatGPT解决这个技术问题 Extra ChatGPT

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

我在 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 将打印包含所有嵌套值的完整数组。

S
SpazzMarticus

这些是 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 settings are explained in the official documentation


如果任何人无法对其 php.ini 进行编辑以使其正常工作或找不到 ini 文件,则另一种方法是即时更改设置,此处显示stackoverflow.com/a/8331138/89211
这些值也可以在 .htaccess 文件中设置:php_value xdebug.var_display_max_depth 5 php_value xdebug.var_display_max_children 256 php_value xdebug.var_display_max_data 1024
在过去的六个月中,我已经访问了这个答案十多次。谢谢你 Michael Berkowski,我永远欠你的债。
@LincolnBergeson 我自己也必须一直查找它。
我已将这些设置添加到 php.ini 和 .htaccess,重新启动服务器(在 localhost 上),但 Visual Studio 代码仍不会显示所有数组值。我错过了什么?
C
Chris Schmitz

我知道这是一个超级旧的帖子,但我认为这可能仍然有帮助。

如果您对阅读 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 某些东西不会向您显示类型,因此更难以识别某些内容是否适当匹配。
这是一个有趣的答案。原来的!
m
mehov

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

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

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

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

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

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

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

B
Boaz

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

xdebug.var_display_max_children
xdebug.var_display_max_data
xdebug.var_display_max_depth

T
The Onin

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


s
some_guy

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

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

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