Як отримати 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 надрукує повний масив із усіма вкладеними значеннями.
Рашмі Джайн

Відповіді:


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 

Звичайно, вони також можуть бути встановлені під час виконання через 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_depthof 5 не є розумним, якщо ви насправді очікуєте отримати будь-яку інформацію від вашогоvar_dump
Ben Harold,

2
@BenHarold Що б ти рекомендував тоді як налаштування?
Anriëtte Myburgh

6
@ AnriëtteMyburgh Це дійсно залежить від вашого коду. Нескладні масиви або JSON можуть бути добре з 5 - 10, мабуть, більш ніж достатньо, але якщо ви хочете глибоко вивчити рамкові об'єкти Symfony, вам може бути краще без обмежень. Жодна пропозиція не відповідає одному розміру.
Майкл Берковський

3
Я відповів на цю відповідь більше десяти разів за останні півроку. Дякую, Михайло Берковський, я назавжди у твоїх боргах.
Лінкольн Бергесон

2
@LincolnBergeson Я також повинен весь час шукати його.
Майкл Берковський

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>';
Девід

7
Майте на увазі, що всі змінні можуть бути не json_encodeable. Об'єкти, які не реалізують інтерфейс jsonserializable, просто повернуть порожній масив "{}"
Крістіан Сандстрьом

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 ([false]);
AnrDaemon

Я знаю, що це пізно, але - print_r () може бути абсолютно заміною var_dump () залежно від того, що ви хочете! Я майже ніколи більше не використовую var_dump (), тому що часто хочу показати структури масивів, а IMO print_r () показує, що набагато краще, ніж var_dump ().
bestprogrammerintworld


3

Я хотів би порекомендувати var_export($array)- він не відображає типів, але він генерує синтаксис, який ви можете використовувати у своєму коді :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.