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 ?


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 .


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!


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

12

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

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

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 :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.