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.