Tam nesne / dizi göstermek için xdebug var_dump nasıl edinilir


310

Ben kullanıyorum Xdebug üzerinde (php_xdebug-2.1.2-5.3-vc9.dll) WAMP . var_dumpBüyük bir nesne veya değişken üzerinde kullandığımda tam değişkeni göstermiyor.

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

Xdebug olmadan beklendiği gibi gösterir. Belgelere baktım ama bir çözüm görmedim. Herkes nasıl xdebug tam nesneyi var_dumpgösterir, bu nasıl düzeltebilirim biliyor mu ?


print_r tüm diziyi tüm iç içe değerlerle basacaktır.
Rashmi Jain

Yanıtlar:


603

Bunlar php.ini dosyasında yapılandırılabilir değişkenlerdir:

; 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 

Tabii ki, bu da ini_set()php.ini değiştirmek ve web sunucunuzu yeniden başlatmak istemiyorum, ancak hızlı bir şekilde daha derin bir şey incelemek gerekiyorsa, yararlı , zamanında da ayarlanabilir .

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

Xdebug ayarları resmi belgelerde açıklanmıştır .


19
Ben iddia display_max_depth5 edilir değil gerçekte herhangi bir bilgi almak için bekliyorsanız aklı başındavar_dump
Ben Harold

2
@BenHarold Bir ayar olarak ne önerirsiniz?
Anriëtte Myburgh

6
@ AnriëtteMyburgh Gerçekten kodunuza bağlıdır. Karmaşık olmayan diziler veya JSON iyi olabilir - 5-10 muhtemelen yeterli olandan daha fazladır, ancak Symfony çerçeve nesnelerini derinlemesine incelemek isterseniz, sınırsız olarak daha iyi olabilirsiniz. Hiçbir öneri herkese uyan tek beden değildir.
Michael Berkowski

3
Bu cevabı son altı ay içinde on kereden fazla ziyaret ettim. Teşekkürler Michael Berkowski, sonsuza kadar borcun içindeyim.
Lincoln Bergeson

2
@LincolnBergeson Kendime her zaman bakmak zorundayım.
Michael Berkowski

38

Bunun süper eski bir yazı olduğunu biliyorum, ama bunun hala yardımcı olabileceğini düşündüm.

Json formatını okumaktan memnunsanız, var_dump'ınızı aşağıdakilerle değiştirebilirsiniz:

return json_encode($myvar);

Bunu, derinden iç içe dizileri olan bir hizmette sorun gidermeye yardımcı olmak için kullanıyorum. Bu, herhangi bir şeyi kesmeden veya php.ini dosyanızı değiştirmeden dizinizin her seviyesini döndürür.

Ayrıca, json_encoded verileri bir dize olduğundan, hata günlüğüne kolayca yazabileceğiniz anlamına gelir

error_log(json_encode($myvar));

Muhtemelen her durum için en iyi seçim değil, ama bir seçim!


12
Bu cevabı seviyorum. Bunun gibi bir şeyle güzel bir html çıktısı da olabilir: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</pre>';
David

7
Tüm değişkenlerin json_encodeable olmayabilir. Jsonserialize edilebilir arayüzü uygulamayan nesneler sadece boş bir dizi "{}" döndürecektir
Kristian Sandström

2
Ayrıca kayda değer, json_encoding bir şey size türleri göstermez, bu yüzden bir şeyin uygun bir şekilde eşleşip eşleşmediğini belirlemek daha zordur.
SEoF

13

Veya bir alternatif kullanabilirsiniz:

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

Sıfır kurulumla çalışır ve Xdebug'un var_dump'ından çok daha fazla özelliğe sahiptir. Kint ile anında iç içe geçmiş sınırı atlamak için

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

12

Bu geç olduğunu biliyorum ama bazı yararlı olabilir:

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

21
print_r()olduğu değil var_dump yerini.
AnrDaemon

Harika cevaplar. Teşekkürler.
PHPst

@AnrDaemon ciddi mi?
PHPst

var_dump ([yanlış]); print_r ([yanlış]);
AnrDaemon

Bu geç olduğunu biliyorum ama - print_r () kesinlikle ne istediğinize bağlı olarak var_dump () için bir yedek olabilir! Neredeyse hiçbir zaman var_dump () kullanmıyorum çünkü genellikle dizilerin yapılarını göstermek istiyorum ve IMO print_r () bunu var_dump () 'den çok daha iyi gösteriyor.
bestprogrammerintheworld


3

Tavsiye etmek istiyorum var_export($array)- türleri göstermiyor, ancak kodunuzda kullanabileceğiniz sözdizimi üretir :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.