Comment obtenir xdebug var_dump pour afficher un objet / tableau complet

310

J'utilise xdebug (php_xdebug-2.1.2-5.3-vc9.dll) sur WAMP . Lorsque j'utilise var_dumpsur un grand objet ou une variable, il n'affiche pas la variable complète.

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

Sans xdebug, il apparaît comme prévu. J'ai regardé la documentation mais je n'ai pas vu de solution. Est-ce que quelqu'un sait comment je peux résoudre ce problème pour que xdebug var_dumpaffiche l' objet complet ?

dm03514
la source
print_r imprimera le tableau complet avec toutes les valeurs imbriquées.
Rashmi Jain

Réponses:

603

Ce sont des variables configurables dans 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 

Bien sûr, ceux-ci peuvent également être définis lors de l'exécution via ini_set(), utile si vous ne souhaitez pas modifier php.ini et redémarrer votre serveur Web mais devez inspecter rapidement quelque chose de plus en profondeur.

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

Les paramètres de Xdebug sont expliqués dans la documentation officielle .

Michael Berkowski
la source
19
Je soutiens que le a display_max_depthde 5 n'est pas sain d'esprit si vous vous attendez à obtenir des informations de votre partvar_dump
Ben Harold
2
@BenHarold Que recommanderiez-vous alors comme paramètre?
Anriëtte Myburgh
6
@ AnriëtteMyburgh Cela dépend vraiment de votre code. Les tableaux non complexes ou JSON peuvent être corrects avec 5 - 10 est probablement plus que suffisant, mais si vous souhaitez examiner en profondeur les objets du framework Symfony, vous pouvez être mieux sans aucune limite. Aucune suggestion n'est unique.
Michael Berkowski
3
J'ai visité cette réponse plus de dix fois au cours des six derniers mois. Merci Michael Berkowski, je vous suis toujours redevable.
Lincoln Bergeson
2
@LincolnBergeson Je dois aussi le chercher moi-même tout le temps.
Michael Berkowski
38

Je sais que c'est un super vieux post, mais je me suis dit que cela pouvait toujours être utile.

Si vous êtes à l'aise avec la lecture du format json, vous pouvez remplacer votre var_dump par:

return json_encode($myvar);

J'ai utilisé cela pour aider à dépanner un service que j'ai construit et qui contient des tableaux profondément imbriqués. Cela retournera tous les niveaux de votre tableau sans rien tronquer ni vous obliger à modifier votre fichier php.ini.

De plus, comme les données json_encoded sont une chaîne, cela signifie que vous pouvez les écrire facilement dans le journal des erreurs

error_log(json_encode($myvar));

Ce n'est probablement pas le meilleur choix pour chaque situation, mais c'est un choix!

Chris Schmitz
la source
12
J'adore cette réponse. Vous pouvez également avoir une jolie sortie html avec quelque chose comme ceci: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</pre>';
David
7
Gardez à l'esprit que toutes les variables peuvent ne pas être json_encodeable. Les objets qui n'implémentent pas l'interface jsonserializable renverront simplement un tableau vide "{}"
Kristian Sandström
2
Il convient également de noter que json_encoding quelque chose ne vous montrera pas les types, il est donc plus difficile d'identifier si quelque chose correspond correctement.
SEoF
13

Ou vous pouvez utiliser une alternative:

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

Il fonctionne avec une configuration zéro et a de toute façon beaucoup plus de fonctionnalités que var_dump de Xdebug. Pour contourner la limite imbriquée à la volée avec Kint, utilisez simplement

 +d( $variable ); // append `+` to the dump call
raveren
la source
12

Je sais que c'est en retard, mais cela pourrait être utile:

echo "<pre>";
print_r($array);
echo "</pre>";
0x58
la source
21
print_r()est pas un remplacement pour var_dump.
AnrDaemon
Des réponses fantastiques. Merci.
PHPst
@AnrDaemon au sérieux?
PHPst
var_dump ([false]); print_r ([faux]);
AnrDaemon
Je sais que c'est tard mais - print_r () pourrait absolument remplacer var_dump () selon ce que vous voulez! Je n'utilise presque plus var_dump () parce que je veux souvent montrer les structures des tableaux et IMO print_r () le montre bien mieux que var_dump ().
bestprogrammerintheworld
3

Je voudrais recommander var_export($array)- il n'affiche pas les types, mais il génère une syntaxe que vous pouvez utiliser dans votre code :)

Nino Škopac
la source