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 ?

dm03514
fonte
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 .

Michael Berkowski
fonte
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!

Chris Schmitz
fonte
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
Raveren
fonte
12

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

echo "<pre>";
print_r($array);
echo "</pre>";
0x58
fonte
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
6

Caixa configurações var_dump de Xdebbug , particularmente os valores dessas configurações:

xdebug.var_display_max_children
xdebug.var_display_max_data
xdebug.var_display_max_depth
Capitão Insaneo
fonte
3

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

Nino Škopac
fonte