Wie man xdebug var_dump dazu bringt, das vollständige Objekt / Array anzuzeigen

310

Ich verwende xdebug (php_xdebug-2.1.2-5.3-vc9.dll) auf WAMP . Wenn ich var_dumpein großes Objekt oder eine große Variable verwende, wird nicht die vollständige Variable angezeigt.

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

Ohne xdebug zeigt es sich wie erwartet. Ich habe mir die Dokumentation angesehen, aber keine Lösung gefunden. Weiß jemand, wie ich das beheben kann, damit xdebug var_dumpdas vollständige Objekt anzeigt ?

dm03514
quelle
print_r druckt das gesamte Array mit allen verschachtelten Werten.
Rashmi Jain

Antworten:

603

Dies sind konfigurierbare Variablen in der 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 

Natürlich können diese auch zur Laufzeit über eingestellt werden. Dies ini_set()ist nützlich, wenn Sie die php.ini nicht ändern und Ihren Webserver neu starten möchten, aber schnell etwas eingehender prüfen müssen.

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

Die Xdebug-Einstellungen werden in der offiziellen Dokumentation erläutert .

Michael Berkowski
quelle
19
Ich behaupte, dass das a display_max_depthvon 5 nicht vernünftig ist, wenn Sie tatsächlich erwarten, irgendwelche Informationen von Ihremvar_dump
Ben Harold
2
@BenHarold Was würden Sie dann als Einstellung empfehlen?
Anriëtte Myburgh
6
@ AnriëtteMyburgh Es hängt wirklich von Ihrem Code ab. Nicht komplexe Arrays oder JSON sind mit 5 - 10 möglicherweise in Ordnung. Dies ist wahrscheinlich mehr als ausreichend. Wenn Sie jedoch Symfony-Framework-Objekte eingehend untersuchen möchten, sind Sie möglicherweise ohne Einschränkungen besser dran. Kein Vorschlag ist eine Einheitsgröße.
Michael Berkowski
3
Ich habe diese Antwort in den letzten sechs Monaten mehr als zehn Mal besucht. Danke Michael Berkowski, ich stehe für immer in deiner Schuld.
Lincoln Bergeson
2
@LincolnBergeson Ich muss es auch die ganze Zeit selbst nachschlagen.
Michael Berkowski
38

Ich weiß, dass dies ein super alter Beitrag ist, aber ich dachte, das könnte immer noch hilfreich sein.

Wenn Sie mit dem Lesen des JSON-Formats vertraut sind, können Sie Ihren var_dump durch Folgendes ersetzen:

return json_encode($myvar);

Ich habe dies verwendet, um bei der Fehlerbehebung eines von mir erstellten Dienstes mit tief verschachtelten Arrays zu helfen. Dadurch wird jede Ebene Ihres Arrays zurückgegeben, ohne dass etwas abgeschnitten oder Ihre php.ini-Datei geändert werden muss.

Da es sich bei den json_encoded-Daten um eine Zeichenfolge handelt, können Sie sie problemlos in das Fehlerprotokoll schreiben

error_log(json_encode($myvar));

Es ist wahrscheinlich nicht die beste Wahl für jede Situation, aber es ist eine Wahl!

Chris Schmitz
quelle
12
Ich liebe diese Antwort. Möglicherweise haben Sie auch eine hübsche HTML-Ausgabe mit folgendem Ergebnis: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</ Pre>';
David
7
Beachten Sie, dass möglicherweise nicht alle Variablen json_encodeable sind. Objekte, die die jsonserializable-Schnittstelle nicht implementieren, geben nur ein leeres Array "{}" zurück
Kristian Sandström
2
Es ist auch erwähnenswert, dass json_encoding etwas die Typen nicht anzeigt, so dass es schwieriger ist zu identifizieren, ob etwas angemessen übereinstimmt.
SEoF
13

Oder Sie können eine Alternative verwenden:

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

Es funktioniert mit Null-Setup und hat sowieso viel mehr Funktionen als Xdebugs var_dump. Verwenden Sie einfach, um das verschachtelte Limit im laufenden Betrieb mit Kint zu umgehen

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

Ich weiß, dass dies spät ist, aber es könnte von Nutzen sein:

echo "<pre>";
print_r($array);
echo "</pre>";
0x58
quelle
21
print_r()ist kein Ersatz für var_dump.
AnrDaemon
Fantastische Antworten. Vielen Dank.
PHPst
@AnrDaemon ernst?
PHPst
var_dump ([false]); print_r ([false]);
AnrDaemon
Ich weiß, dass dies spät ist, aber - print_r () könnte absolut ein Ersatz für var_dump () sein, je nachdem, was Sie wollen! Ich benutze var_dump () fast nie mehr, weil ich oft Strukturen von Arrays zeigen möchte und IMO print_r () das viel besser zeigt als var_dump ().
bestprogrammerintheworld
6

Kasse Xdebbug der var_dump Einstellungen , insbesondere die Werte dieser Einstellungen:

xdebug.var_display_max_children
xdebug.var_display_max_data
xdebug.var_display_max_depth
Kapitän Insaneo
quelle
3

Ich würde empfehlen var_export($array)- es zeigt keine Typen an, aber es generiert eine Syntax, die Sie in Ihrem Code verwenden können :)

Nino Škopac
quelle