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

dm0*_*514 292 php xdebug

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

array
'node' => 
  array
    'my_form' => 
      array
        'form' => 
          array
            ...
Run Code Online (Sandbox Code Playgroud)

没有xdebug它显示应该是预期的.我查看了文档,但没有看到解决方案.有谁知道我怎么解决这个问题,所以xdebug var_dump显示完整的对象?

Mic*_*ski 573

这些是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 
Run Code Online (Sandbox Code Playgroud)

当然,这些也可以在运行时设置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');
Run Code Online (Sandbox Code Playgroud)

Xdebug设置在官方文档中有说明.

  • 我认为如果你真的希望从你的`var_dump获得任何信息,那么'display_max_depth`为5不是**. (18认同)
  • @AnriëtteMyburgh这真的取决于你的代码.非复杂数组或JSON可能没问题,5-10可能绰绰有余,但如果你想深入研究Symfony框架对象,你可能会更好,没有限制.没有任何建议是一刀切的. (6认同)
  • 在过去的六个月里,我已经十多次访问过这个答案了.谢谢Michael Berkowski,我永远欠你的债. (3认同)
  • @BenHarold那么您会推荐什么设置? (2认同)
  • @LincolnBergeson我自己也必须一直进行查找。 (2认同)

Chr*_*itz 36

我知道这是一个超级老帖子,但我认为这可能仍然有用.

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

return json_encode($myvar);
Run Code Online (Sandbox Code Playgroud)

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

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

error_log(json_encode($myvar));
Run Code Online (Sandbox Code Playgroud)

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

  • 我喜欢这个答案.你可能还有一个漂亮的html输出,例如:return'<pre>'.json_encode($ myvar,JSON_PRETTY_PRINT).'</ pre>'; (11认同)
  • 请记住,所有变量可能都不是json_encodeable.没有实现jsonserializable接口的对象只返回一个空数组"{}" (7认同)
  • 同样值得注意的是,json_encoding某些内容不会显示您的类型,因此,识别某些内容是否匹配更加困难。 (2认同)

rav*_*ren 13

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

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

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

 +d( $variable ); // append `+` to the dump call
Run Code Online (Sandbox Code Playgroud)


小智 10

我现在这已经晚了但它可能有一些用处:

echo "<pre>";
print_r($array);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

  • `print_r()`**不是**替换var_dump. (20认同)

Cap*_*neo 6

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

xdebug.var_display_max_children
xdebug.var_display_max_data
xdebug.var_display_max_depth
Run Code Online (Sandbox Code Playgroud)


Nin*_*pac 5

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