Cara mendapatkan xdebug var_dump untuk menampilkan objek / array penuh

310

Saya menggunakan Xdebug (php_xdebug-2.1.2-5.3-vc9.dll) di WAMP . Ketika saya gunakan var_dumppada objek besar atau variabel itu tidak menunjukkan variabel penuh.

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

Tanpa xdebug, ini menunjukkan seperti yang diharapkan. Saya melihat dokumentasi tetapi tidak melihat solusi. Adakah yang tahu bagaimana saya bisa memperbaikinya sehingga xdebug var_dumpmenampilkan objek lengkap ?

dm03514
sumber
print_r akan mencetak array lengkap dengan semua nilai bersarang.
Rashmi Jain

Jawaban:

603

Ini adalah variabel yang dapat dikonfigurasi di 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 

Tentu saja, ini juga dapat diatur pada saat runtime via ini_set() , berguna jika Anda tidak ingin memodifikasi php.ini dan memulai kembali server web Anda tetapi perlu dengan cepat memeriksa sesuatu yang lebih dalam.

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

Pengaturan Xdebug dijelaskan dalam dokumentasi resmi .

Michael Berkowski
sumber
19
Saya berpendapat bahwa nilai display_max_depth5 tidak waras jika Anda benar-benar berharap mendapatkan informasi dari Andavar_dump
Ben Harold
2
@BenHarold Apa yang akan Anda rekomendasikan sebagai pengaturan?
Anriëtte Myburgh
6
@ AnriëtteMyburgh Ini sangat tergantung pada kode Anda. Array non-kompleks atau JSON mungkin baik-baik saja dengan 5 - 10 mungkin lebih dari cukup, tetapi jika Anda ingin memeriksa objek framework Symfony secara mendalam, Anda mungkin lebih baik tanpa batas. Tidak ada saran yang cocok untuk semua.
Michael Berkowski
3
Saya telah mengunjungi jawaban ini lebih dari sepuluh kali dalam enam bulan terakhir. Terima kasih Michael Berkowski, saya selamanya berhutang budi.
Lincoln Bergeson
2
@LincolnBergeson Saya harus mencarinya sendiri setiap saat.
Michael Berkowski
38

Saya tahu ini adalah posting yang sangat lama, tapi saya pikir ini mungkin masih membantu.

Jika Anda nyaman membaca format json, Anda dapat mengganti var_dump Anda dengan:

return json_encode($myvar);

Saya telah menggunakan ini untuk membantu memecahkan masalah layanan yang telah saya bangun yang memiliki beberapa array yang bersarang. Ini akan mengembalikan setiap tingkat array Anda tanpa memotong apa pun atau mengharuskan Anda untuk mengubah file php.ini Anda.

Juga, karena data json_encoded adalah string, itu berarti Anda dapat menulisnya ke log kesalahan dengan mudah

error_log(json_encode($myvar));

Itu mungkin bukan pilihan terbaik untuk setiap situasi, tapi itu pilihan!

Chris Schmitz
sumber
12
Saya suka jawaban ini. Anda juga mungkin memiliki output html yang cantik dengan sesuatu seperti ini: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT). '</pre>';
David
7
Perlu diingat bahwa semua variabel mungkin tidak json_encodeable. Objek yang tidak mengimplementasikan antarmuka jsonserializable hanya akan mengembalikan array kosong "{}"
Kristian Sandström
2
Juga patut dicatat, json_encoding sesuatu tidak akan menunjukkan kepada Anda jenisnya, jadi lebih sulit untuk mengidentifikasi jika sesuatu cocok dengan tepat.
SEoF
13

Atau Anda dapat menggunakan alternatif:

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

Ia bekerja dengan nol pengaturan dan memiliki lebih banyak fitur daripada var_dump Xdebug pula. Untuk melewati batas bersarang dengan Kint, gunakan saja

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

Saya tahu ini terlambat tetapi mungkin bermanfaat:

echo "<pre>";
print_r($array);
echo "</pre>";
0x58
sumber
21
print_r()adalah tidak pengganti var_dump.
AnrDaemon
Jawaban yang fantastis. Terima kasih.
PHPst
@AnrDaemon serius?
PHPst
var_dump ([false]); print_r ([false]);
AnrDaemon
Saya tahu ini terlambat tetapi - print_r () benar-benar bisa menjadi pengganti var_dump () tergantung dari apa yang Anda inginkan! Saya hampir tidak pernah menggunakan var_dump () lagi karena saya sering ingin menunjukkan struktur array dan IMO print_r () menunjukkan bahwa jauh lebih baik daripada var_dump ().
bestprogrammerintheworld
6

Periksa pengaturan var_dump Xdebbug , terutama nilai pengaturan ini:

xdebug.var_display_max_children
xdebug.var_display_max_data
xdebug.var_display_max_depth
Kapten Insaneo
sumber
3

Saya ingin merekomendasikan var_export($array)- ini tidak menunjukkan tipe, tetapi menghasilkan sintaks yang dapat Anda gunakan dalam kode Anda :)

Nino Škopac
sumber