วิธีรับ xdebug var_dump เพื่อแสดงออบเจ็กต์ / อาร์เรย์ทั้งหมด


310

ฉันใช้xdebug (php_xdebug-2.1.2-5.3-vc9.dll) บนWAMP เมื่อฉันใช้var_dumpกับวัตถุหรือตัวแปรขนาดใหญ่จะไม่แสดงตัวแปรแบบเต็ม

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

หากไม่มี xdebug จะแสดงตามที่ควรจะเป็น ฉันดูเอกสาร แต่ไม่เห็นวิธีแก้ปัญหา ไม่มีใครรู้ว่าฉันจะแก้ไขได้อย่างไรเพื่อ xdebug var_dumpแสดงวัตถุเต็ม ?


print_r จะพิมพ์อาร์เรย์ที่สมบูรณ์พร้อมค่าซ้อนทั้งหมด
Rashmi Jain

คำตอบ:


603

เหล่านี้เป็นตัวแปรที่กำหนดค่าได้ใน 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 

แน่นอนสิ่งเหล่านี้อาจถูกตั้งค่าที่ runtime ผ่านini_set()ซึ่งมีประโยชน์หากคุณไม่ต้องการแก้ไข php.ini และรีสตาร์ทเว็บเซิร์ฟเวอร์ของคุณ แต่ต้องตรวจสอบสิ่งที่ลึกกว่าอย่างรวดเร็ว

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 มีการอธิบายในเอกสารอย่างเป็นทางการ


19
ฉันขอยืนยันว่า a display_max_depth5 ไม่ได้มีเหตุผลถ้าคุณคาดหวังว่าจะได้รับข้อมูลใด ๆ จากคุณจริง ๆvar_dump
Ben Harold

2
@BenHarold คุณจะแนะนำอะไรเป็นค่าติดตั้งแล้ว?
Anriëtte Myburgh

6
@ AnriëtteMyburghขึ้นอยู่กับรหัสของคุณ อาร์เรย์ที่ไม่ซับซ้อนหรือ JSON อาจใช้ได้ด้วย 5 - 10 น่าจะเพียงพอ แต่ถ้าคุณต้องการตรวจสอบวัตถุเฟรมเวิร์ก Symfony อย่างลึกซึ้งคุณอาจจะดีกว่าโดยไม่มีข้อ จำกัด ไม่มีข้อเสนอแนะขนาดเดียวเหมาะกับทุกคน
Michael Berkowski

3
ฉันได้เยี่ยมชมคำตอบนี้มากกว่าสิบครั้งในช่วงหกเดือนที่ผ่านมา ขอบคุณ Michael Berkowski ฉันเป็นหนี้บุญคุณตลอดไป
Lincoln Bergeson

2
@ LincolnBergeson ฉันต้องค้นหามันตลอดเวลาเช่นกัน
Michael Berkowski

38

ฉันรู้ว่านี่เป็นโพสต์เก่าสุด แต่ฉันคิดว่านี่อาจเป็นประโยชน์

หากคุณพอใจกับการอ่านรูปแบบ json คุณสามารถแทนที่ var_dump ด้วย:

return json_encode($myvar);

ฉันใช้สิ่งนี้เพื่อช่วยแก้ไขปัญหาบริการที่ฉันสร้างขึ้นซึ่งมีอาร์เรย์ที่ซ้อนกันอยู่บางส่วน สิ่งนี้จะส่งคืนอาเรย์ของคุณทุกระดับโดยไม่ต้องตัดทอนอะไรหรือกำหนดให้คุณเปลี่ยนไฟล์ php.ini

นอกจากนี้เนื่องจากข้อมูล json_encoded เป็นสตริงหมายความว่าคุณสามารถเขียนลงในบันทึกข้อผิดพลาดได้อย่างง่ายดาย

error_log(json_encode($myvar));

อาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับทุกสถานการณ์ แต่เป็นตัวเลือก!


12
ฉันรักคำตอบนี้ คุณอาจมีเอาต์พุต html ที่สวยงามพร้อมด้วยสิ่งนี้: return '<pre>' .json_encode ($ myvar, JSON_PRETTY_PRINT) '</pre>';
David

7
โปรดทราบว่าตัวแปรทั้งหมดอาจไม่เป็น json_encodeable วัตถุที่ไม่ได้ใช้อินเทอร์เฟซ jsonserializable จะส่งคืนอาร์เรย์ว่าง "{}"
Kristian Sandström

2
นอกจากนี้ยังควรระวังด้วย json_encoding บางสิ่งจะไม่แสดงประเภทของคุณดังนั้นจึงยากที่จะระบุว่ามีบางสิ่งที่ตรงกับความเหมาะสมหรือไม่
SEOF

13

หรือคุณสามารถใช้ทางเลือก:

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

มันใช้งานได้กับการตั้งค่าเป็นศูนย์และมีคุณสมบัติมากมายกว่า var_dump ของ Xdebug อยู่ดี หากต้องการข้ามขีด จำกัด ซ้อนบนการบินด้วย Kint เพียงใช้

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

12

ฉันรู้ว่ามันสายไปแล้ว แต่มันอาจเป็นการใช้งานบางอย่าง:

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

21
print_r()คือไม่เปลี่ยนสำหรับ var_dump
AnrDaemon

คำตอบที่ยอดเยี่ยม ขอบคุณ
PHPst

@AnrDaemon อย่างจริงจัง?
PHPst

var_dump ([เท็จ]); print_r ([เท็จ]);
AnrDaemon

ฉันรู้ว่ามันสาย แต่ - print_r () อาจทดแทน var_dump () ขึ้นอยู่กับสิ่งที่คุณต้องการ! ฉันแทบจะไม่เคยใช้ var_dump () อีกต่อไปเพราะฉันมักต้องการแสดงโครงสร้างของอาร์เรย์และ IMO print_r () แสดงให้เห็นว่าดีกว่า var_dump ()
bestprogrammerintheworld


3

ฉันต้องการที่จะแนะนำvar_export($array)- มันไม่แสดงประเภท แต่มันสร้างไวยากรณ์ที่คุณสามารถใช้ในรหัสของคุณ :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.