Jak zdobyć xdebug var_dump, aby wyświetlić pełny obiekt / tablicę


310

Używam xdebug (php_xdebug-2.1.2-5.3-vc9.dll) na WAMP . Kiedy używam var_dumpdużego obiektu lub zmiennej, nie wyświetla pełnej zmiennej.

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

Bez xdebug pokazuje, jak należy się spodziewać. Przejrzałem dokumentację, ale nie znalazłem rozwiązania. Czy ktoś wie, jak to naprawić, aby xdebug var_dumpwyświetlał pełny obiekt?


print_r wypisze całą tablicę ze wszystkimi zagnieżdżonymi wartościami.
Rashmi Jain,

Odpowiedzi:


603

Są to zmienne konfigurowalne w 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 

Oczywiście można je również ustawić w czasie wykonywania ini_set(), co jest przydatne, jeśli nie chcesz modyfikować pliku php.ini i restartować serwer WWW, ale musisz szybko sprawdzić coś głębiej.

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

Ustawienia Xdebug są wyjaśnione w oficjalnej dokumentacji .


19
Twierdzę, że a display_max_depthz 5 nie jest rozsądny, jeśli faktycznie spodziewasz się uzyskać od ciebie jakieś informacjevar_dump
Ben Harold

2
@BenHarold Co byś polecił jako ustawienie?
Anriëtte Myburgh

6
@ AnriëtteMyburgh To naprawdę zależy od twojego kodu. Nieskomplikowane tablice lub JSON mogą być w porządku, ponieważ 5-10 jest prawdopodobnie więcej niż wystarczające, ale jeśli chcesz głęboko zbadać obiekty frameworka Symfony, możesz być lepszy bez żadnych ograniczeń. Żadna sugestia nie jest uniwersalna.
Michael Berkowski

3
Odwiedziłem tę odpowiedź ponad dziesięć razy w ciągu ostatnich sześciu miesięcy. Dziękuję Michałowi Berkowskiemu, jestem na zawsze w twoim długu.
Lincoln Bergeson,

2
@LincolnBergeson Ja też muszę to cały czas sprawdzać.
Michał Berkowski

38

Wiem, że to bardzo stary post, ale pomyślałem, że to może być pomocne.

Jeśli nie masz ochoty czytać formatu json, możesz zastąpić swój var_dump:

return json_encode($myvar);

Używam tego do rozwiązywania problemów z usługą, którą buduję, która ma głęboko zagnieżdżone tablice. Spowoduje to zwrócenie każdego poziomu tablicy bez obcinania czegokolwiek i konieczności zmiany pliku php.ini.

Ponadto, ponieważ dane zakodowane w formacie json są ciągiem, oznacza to, że można łatwo zapisać je w dzienniku błędów

error_log(json_encode($myvar));

Prawdopodobnie nie jest najlepszym wyborem dla każdej sytuacji, ale jest wyborem!


12
Uwielbiam tę odpowiedź. Możesz też mieć całkiem niezły wynik HTML z czymś takim: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</pre>';
David,

7
Należy pamiętać, że wszystkie zmienne mogą nie być kodem_json. Obiekty, które nie implementują interfejsu jsonserializable, zwrócą pustą tablicę {{}
Kristian Sandström

2
Warto również zauważyć, że json_encoding coś nie pokazuje typów, więc trudniej jest ustalić, czy coś pasuje odpowiednio.
SEoF,

13

Lub możesz użyć alternatywy:

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

Działa z ustawieniem zerowym i ma znacznie więcej funkcji niż var_dump Xdebuga. Aby ominąć limit zagnieżdżenia w locie za pomocą Kint, po prostu użyj

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

12

Wiem, że jest późno, ale może się przydać:

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

21
print_r()to nie zastępuje var_dump.
AnrDaemon,

Fantastyczne odpowiedzi. Dzięki.
PHPst

@AnrDaemon poważnie?
PHPst

var_dump ([false]); print_r ([fałsz]);
AnrDaemon,

Wiem, że jest późno, ale - print_r () może absolutnie zastąpić var_dump () w zależności od tego, czego chcesz! Prawie nigdy nie używam już var_dump (), ponieważ często chcę pokazywać struktury tablic, a IMO print_r () pokazuje to znacznie lepiej niż var_dump ().
bestprogrammerintheworld


3

Chciałbym polecić var_export($array)- nie pokazuje typów, ale generuje składnię, której można użyć w kodzie :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.