Cách nhận xdebug var_dump để hiển thị đầy đủ đối tượng / mảng


310

Tôi đang sử dụng Xdebug (php_xdebug-2.1.2-5.3-vc9.dll) trên WAMP . Khi tôi sử dụng var_dumptrên một đối tượng lớn hoặc biến nó không hiển thị đầy đủ biến.

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

Không có xdebug, nó sẽ hiển thị như mong đợi. Tôi đã xem tài liệu nhưng không thấy giải pháp. Có ai biết làm thế nào tôi có thể sửa lỗi này để xdebug var_dumphiển thị toàn bộ đối tượng không?


print_r sẽ in mảng hoàn chỉnh với tất cả các giá trị lồng nhau.
Rashmi Jain

Câu trả lời:


603

Đây là các biến cấu hình trong 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 

Tất nhiên, những thứ này cũng có thể được đặt trong thời gian chạy qua ini_set(), rất hữu ích nếu bạn không muốn sửa đổi php.ini và khởi động lại máy chủ web của mình nhưng cần nhanh chóng kiểm tra một cái gì đó sâu hơn.

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

Cài đặt Xdebug được giải thích trong tài liệu chính thức .


19
Tôi cho rằng a display_max_depthtrong số 5 không lành mạnh nếu bạn thực sự mong đợi nhận được bất kỳ thông tin nào từ bạnvar_dump
Ben Harold

2
@BenHarold Bạn muốn giới thiệu gì khi cài đặt?
Anriëtte Myburgh

6
@ AnriëtteMyburgh Nó thực sự phụ thuộc vào mã của bạn. Các mảng hoặc JSON không phức tạp có thể ổn với 5 - 10 có lẽ là quá đủ, nhưng nếu bạn muốn kiểm tra sâu các đối tượng khung Symfony, bạn có thể tốt hơn không có giới hạn. Không có gợi ý là một kích cỡ phù hợp với tất cả.
Michael Berkowski

3
Tôi đã truy cập câu trả lời này hơn mười lần trong sáu tháng qua. Cảm ơn Michael Berkowski, tôi mãi mãi trong khoản nợ của bạn.
Lincoln Bergeson

2
@LincolnBergeson Tôi cũng phải tự mình tìm kiếm nó.
Michael Berkowski

38

Tôi biết đây là một bài viết siêu cũ, nhưng tôi đoán rằng nó vẫn có thể hữu ích.

Nếu bạn cảm thấy thoải mái với việc đọc định dạng json, bạn có thể thay thế var_dump của mình bằng:

return json_encode($myvar);

Tôi đã sử dụng điều này để giúp khắc phục sự cố một dịch vụ mà tôi đang xây dựng có một số mảng được lồng sâu. Điều này sẽ trả về mọi cấp độ của mảng mà không cắt bớt bất cứ thứ gì hoặc yêu cầu bạn thay đổi tệp php.ini.

Ngoài ra, vì dữ liệu json_encoding là một chuỗi, điều đó có nghĩa là bạn có thể ghi nó vào nhật ký lỗi một cách dễ dàng

error_log(json_encode($myvar));

Nó có thể không phải là sự lựa chọn tốt nhất cho mọi tình huống, nhưng đó là một sự lựa chọn!


12
Tôi thích câu trả lời này. Bạn cũng có thể có một đầu ra html đẹp mắt với cái gì đó như thế này: return '<pre>'. Json_encode ($ myvar, JSON_PRETTY_PRINT). '</ Pre>';
David

7
Hãy nhớ rằng tất cả các biến có thể không json_encodizable. Các đối tượng không triển khai giao diện jsonserializable sẽ chỉ trả về một mảng trống "{}"
Kristian Sandström

2
Cũng đáng chú ý, json_encoding một cái gì đó sẽ không hiển thị cho bạn các loại, vì vậy khó xác định hơn nếu một cái gì đó phù hợp.
SEoF

13

Hoặc bạn có thể sử dụng một thay thế:

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

Nó hoạt động với số không được thiết lập và có nhiều tính năng hơn so với var_dump của Xdebug. Để vượt qua giới hạn lồng nhau khi đang bay với Kint, chỉ cần sử dụng

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

12

Tôi biết điều này là muộn nhưng nó có thể được sử dụng:

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

21
print_r()không một sự thay thế cho var_dump.
AnrDaemon

Câu trả lời tuyệt vời. Cảm ơn.
PHP

@AnrDaemon nghiêm túc?
PHP

var_dump ([sai]); print_r ([sai]);
AnrDaemon

Tôi biết điều này là muộn nhưng - print_r () hoàn toàn có thể là sự thay thế cho var_dump () tùy thuộc vào những gì bạn muốn! Tôi gần như không bao giờ sử dụng var_dump () nữa vì tôi thường muốn hiển thị các cấu trúc của mảng và IMO print_r () cho thấy điều đó tốt hơn nhiều so với var_dump ().
bestprogrammerinthewworld


3

Tôi muốn giới thiệu var_export($array)- nó không hiển thị các loại, nhưng nó tạo ra cú pháp bạn có thể sử dụng trong mã của mình :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.