Как получить 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показывал полный объект?

dm03514
источник
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_depth5 не является нормальным, если вы действительно ожидаете получить какую-либо информацию от вашегоvar_dump
Бен Гарольд
2
@BenHarold Что бы вы порекомендовали в качестве настройки тогда?
Анриетт Майбург
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 что-то не будет показывать вам типы, поэтому сложнее определить, соответствует ли что-то соответствующим образом.
августа
13

Или вы можете использовать альтернативу:

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

Он работает с настройкой нуля и имеет гораздо больше возможностей, чем Xdebug var_dump. Чтобы обойти вложенный лимит на лету с Kint, просто используйте

 +d( $variable ); // append `+` to the dump call
raveren
источник
12

Я знаю, что уже поздно, но это может быть полезно:

echo "<pre>";
print_r($array);
echo "</pre>";
0x58
источник
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)- он не показывает типы, но генерирует синтаксис, который вы можете использовать в своем коде :)

Нино Шкопац
источник