Como fazer com que o xdebug var_dump mostre o objeto / array completo


310

Estou usando o xdebug (php_xdebug-2.1.2-5.3-vc9.dll) no WAMP . Quando uso var_dumpem um objeto grande ou variável, ele não mostra a variável completa.

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

Sem o xdebug, ele mostra como deveria ser esperado. Eu olhei para a documentação, mas não encontrei uma solução. Alguém sabe como eu posso consertar isso para que o xdebug var_dumpmostre o objeto completo ?


print_r imprimirá a matriz completa com todos os valores aninhados.
Rashmi Jain

Respostas:


603

Estas são variáveis ​​configuráveis ​​no 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 

Obviamente, eles também podem ser configurados em tempo de execução via ini_set(), útil se você não quiser modificar o php.ini e reiniciar o servidor da Web, mas precisar inspecionar rapidamente algo mais profundamente.

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

As configurações do Xdebug são explicadas na documentação oficial .


19
Eu afirmo que o a display_max_depthde 5 não é sensato se você realmente espera obter alguma informação do seuvar_dump
Ben Harold

2
@BenHarold O que você recomendaria como configuração então?
Anriëtte Myburgh

6
@ AnriëtteMyburgh Realmente depende do seu código. Matrizes não complexas ou JSON podem ficar bem com 5 a 10 é provavelmente mais do que suficiente, mas se você quiser examinar profundamente os objetos da estrutura do Symfony, poderá se sair melhor sem limites. Nenhuma sugestão é do tamanho único.
22815 Michael Berkowski

3
Eu visitei essa resposta mais de dez vezes nos últimos seis meses. Obrigado Michael Berkowski, estou para sempre em dívida com você.
Lincoln Bergeson

2
@LincolnBergeson Eu também tenho que procurar o tempo todo.
Michael Berkowski

38

Sei que esse post é super antigo, mas achei que isso ainda pode ser útil.

Se você estiver familiarizado com a leitura do formato json, poderá substituir seu var_dump por:

return json_encode($myvar);

Eu tenho usado isso para ajudar a solucionar problemas de um serviço que estou construindo que possui algumas matrizes profundamente aninhadas. Isso retornará todos os níveis de sua matriz sem truncar nada ou exigir que você altere seu arquivo php.ini.

Além disso, como os dados json_encoded são uma sequência, significa que você pode gravá-los no log de erros facilmente

error_log(json_encode($myvar));

Provavelmente não é a melhor escolha para todas as situações, mas é uma escolha!


12
Eu amo essa resposta. Você também pode ter uma saída html bonita com algo assim: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</pre>';
David

7
Lembre-se de que nem todas as variáveis ​​podem ser codificadas por json. Objetos que não implementam a interface jsonserializable só vai retornar um array vazio "{}"
Kristian Sandström

2
Também é importante notar que json_encoding something não mostra os tipos, por isso é mais difícil identificar se algo corresponde adequadamente.
Seof

13

Ou você pode usar uma alternativa:

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

Ele funciona com configuração zero e possui muito mais recursos do que o var_dump do Xdebug. Para ignorar o limite aninhado em tempo real com o Kint, basta usar

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

12

Eu sei que isso é tarde, mas pode ser de alguma utilidade:

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

21
print_r()não é um substituto para var_dump.
AnrDaemon 18/07/2016

Respostas fantásticas. Obrigado.
PHPst 27/12/18

@AnrDaemon a sério?
PHPst 27/12/18

var_dump ([falso]); print_r ([falso]);
AnrDaemon 27/12/2018

Sei que está atrasado, mas - print_r () pode ser absolutamente um substituto para var_dump (), dependendo do que você quiser! Eu quase nunca mais uso var_dump () porque geralmente quero mostrar estruturas de matrizes e o IMO print_r () mostra muito melhor do que var_dump ().
bestprogrammerintheworld


3

Eu gostaria de recomendar var_export($array)- ele não mostra tipos, mas gera sintaxe que você pode usar no seu código :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.