2012-04-03 15 views
240

Sto usando xdebug (php_xdebug-2.1.2-5.3-vc9.dll) su WAMP. Quando uso var_dump su un oggetto o una variabile di grandi dimensioni, non mostra la variabile completa.Come ottenere xdebug var_dump per mostrare l'oggetto/array completo

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

Senza xdebug mostra come dovrebbe essere previsto. Ho guardato la documentazione ma non ho visto una soluzione. Qualcuno sa come posso risolvere questo modo xdebug var_dump mostra l'oggetto completo?

+0

print_r stamperà la gamma completa di tutti i valori nidificati. –

risposta

464

Queste sono variabili configurabili in php.ini:

; with sane limits 
xdebug.var_display_max_depth = 5 
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 

Naturalmente, questi possono anche essere impostati a runtime via ini_set(), utile se non si desidera modificare php.ini e riavviare il server Web, ma è necessario ispezionare rapidamente qualcosa in modo più approfondito.

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

Xdebug settings are explained in the official documentation.

+0

Se qualcuno non è in grado di ottenere le modifiche per il corretto funzionamento di php.ini o se non riesce a trovare il file ini, l'alternativa è quella di modificare le impostazioni al volo, come mostrato qui http://stackoverflow.com/a/8331138/89211 – Relequestual

+11

Io sostengo che un 'display_max_depth' di 5 è ** non ** sano se ci si aspetta effettivamente di ottenere informazioni dal tuo' var_dump' –

+1

@BenHarold Che cosa consiglieresti come impostazione allora? –

5

Cassa Xdebbug's var_dump settings, in particolare i valori di queste impostazioni:

xdebug.var_display_max_children 
xdebug.var_display_max_data 
xdebug.var_display_max_depth 
7

Oppure è possibile utilizzare in alternativa:

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

Funziona con lo zero impostato e ha molto più funzioni rispetto var_dump di Xdebug comunque. Per bypassare il limite nidificato al volo con Kint, basta usare

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

So che questo è un post super vecchio, ma ho pensato che questo potrebbe essere ancora utile.

Se sei a tuo agio con il formato JSON lettura si potrebbe sostituire il var_dump con:

return json_encode($myvar); 

Sto usando questo per risolvere un servizio Sono stato edificio che ha alcuni array profondamente nidificate. Ciò restituirà ogni livello dell'array senza troncare nulla o richiedere la modifica del file php.ini.

Inoltre, perché i dati json_encoded è una stringa che significa che è possibile scrivere al log degli errori facilmente

error_log(json_encode($myvar)); 

Probabilmente non è la scelta migliore per ogni situazione, ma è una scelta!

+5

Amo questa risposta. Potresti anche avere un output html piuttosto simile a qualcosa del tipo: return '

'.json_encode($myvar, JSON_PRETTY_PRINT).'
'; – David

+0

Ah, buona idea! Inizierò ad aggiungerlo. Grazie! –

+5

Ricordare che tutte le variabili potrebbero non essere json_encodeable. Gli oggetti che non implementano l'interfaccia jsonserializable restituiranno solo un array vuoto "{}" –

7

ora questo è in ritardo, ma potrebbe essere di qualche utilità:

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

'print_r()' è ** non ** una sostituzione per var_dump. – AnrDaemon