Просмотр полных строк во время отладки в Eclipse

166

При отладке кода Java строки в представлениях «Переменные» и «Выражения» отображаются только до определенной длины, после чего Eclipse показывает «...»

Есть ли способ проверить всю строку? (Это облегчает добавление операторов логирования для отладки везде)

ragebiswas
источник
где вы видите это поведение? какая часть отладчика?
Скаффман
Кстати, это может быть неправильно, потому что это может не сработать, но если вы используете отладочную библиотеку, такую ​​как java.util.logging или log4j, вы можете легко превратить ваши операторы отладки (с различными уровнями отладки) в распечатки или в лог-файлы, и это может дать вам преимущество, которого не может просеивать строки в окне отладки. Просто мысль =)
corsiKa

Ответы:

225

В представлении «Переменные» можно щелкнуть правой кнопкой мыши панель «Подробности» (раздел, в котором отображается содержимое строки) и выбрать всплывающее меню «Максимальная длина ...». Такая же длина относится к всплывающему окну инспектора выражений и нескольким другим местам.

введите описание изображения здесь

Евгений Кулешов
источник
17
Путь лучшее решение, чем выбранное. Спасибо!
Колин
13
Следует отметить, что область сведений - это раздел, в котором отображается содержимое строки.
Bnrdo
1
Как это сделать в Eclipse Kepler? Просьба помочь
Глупо
1
Хорошей новостью является то, что это изменение также влияет на длину, отображаемую при наведении на переменную, проверке в окне «Проверка» или представлении «Выражения» и отображении значений в представлении «Отображение».
Стив Чемберс
1
Я обновил правильное решение (принятое ранее было единственным решением для действительно старых версий Eclipse).
ragebis был
134

В представлении « Переменные» щелкните правой кнопкой мыши переменную и выберите « Изменить значение» . Если ваша переменная огромна, вам придется подождать несколько минут (в этом случае Eclipse не отвечает на команды), но в конце Eclipse покажет вашу переменную полностью.

Umberto
источник
2
Я могу видеть только "data:image/bitmap;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQE... (length: 22869)". Установите параметр «Максимальная длина» не работает, а также «Изменить значение».
Фалько
@falko «Максимальная длина» у меня не сработала, «Изменить значение» было в порядке (после ожидания в течение нескольких секунд, в зависимости от переменной длины).
Умберто
По крайней мере, в моей системе это значительно медленнее, чем увеличение «Максимальной длины» (см. Другой ответ).
Слеське
Eclipse не совсем доволен вашей идеей. Я попробовал это, и теперь с 30 минут жду ответа от Eclipse. Buuut: Кажется, это работает;)
Joshit
22

Если у вас действительно длинная строка, я использую другую стратегию: создайте дамп в файл. У меня есть фрагмент кода, который я использую в представлении «Отображение», который оценивается для вывода данных в файл. Я использую Commons IO, но вы можете сделать это только методами JDK.

org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File("<filename>"), <expression to evaluate>);

Естественно, вам понадобится JAR Commons IO в вашем классе, чтобы это работало. Если нет, прибегайте к работе JDK.

zvikico
источник
5
крутой обходной путь. Я лично принял бы это как лучший ответ. Предостережение: <имя_файла> должно быть определено для системы, в которой работает JVM, что имеет значение, если вы выполняете удаленную отладку, и в этом случае файл будет записан в удаленной системе, а не на рабочей станции, где работает eclipse ,
Рексфорд
18

Лучший способ просмотреть значение String в представлении отладки eclipse:

1) Переключиться в режим отладки в Eclipse

2) Выберите нужную переменную в области переменных.

3) Щелкните правой кнопкой мыши по области отображения переменной области, где отображается значение, и щелкните по Max Length. Введите максимальное значение символа в области «Настройка деталей».

4) Приветствия

введите описание изображения здесь

Вакас Ахмед
источник
1
Это графическое объяснение действительно полезно. +1
Бхавин Шах
3

Когда отладчик достигнет точки, в которой вы хотите получить значение String, просто введите оператор sysOut

System.out.println("The value is : \n " + query);

Выберите приведенный выше оператор, щелкните правой кнопкой мыши -> Выполнить

Это напечатает значение на консоли

Sonali
источник
0

Для отладки на основе javascript в eclipse метод «change value» и метод «Max length» не дали мне результата, добавив необходимый объект для просмотра ( выражения ), а затем щелкнув правой кнопкой мыши наблюдаемое выражение, чтобы выбрать «Load Full Value», - единственное решение это работает для меня, но даже это вставляет нежелательные "\ n" в вывод .

Примечание. Параметр «Максимальная длина» должен быть установлен, чтобы «Загрузка полного значения» работала, поскольку он загружает значения до максимальной длины (по умолчанию в Eclipse используется значение 10000). Обратитесь к ответу выше, чтобы увидеть, как установить максимальную длину.

Принц Чампапилли
источник
0

В Eclipse Mars нет «maxLength». И «изменение значения» работает только с «Переменными», а не «Выражениями», поэтому ни одно из вышеперечисленных не работает для меня.

введите описание изображения здесь

И, выражение обрезают в середине, а не в конце. Я думаю, они изменили поведение по умолчанию.

Единственное, что работает для меня, - это расширить ширину столбца имени выражения и щелкнуть выражение, чтобы выделить его все, чтобы увидеть содержимое полной длины.

WesternGun
источник
0

Ничто из вышеперечисленного не работает для меня, более того, некоторые элементы пользовательского интерфейса в моем Eclipse не могут быть найдены, как описано. Я использую STS 4.3.1.

Нужное мне значение было действительно большим, оно является частью огромного запроса JSON. Обходной путь - использовать выражение в консоли Eclipse Debug Shell и вывести подстроку всего значения. Поскольку вы можете увидеть частичное значение, проверьте его и используйте последние несколько литералов в качестве позиции для вывода следующего фрагмента строки. Повторите этот подход, пока не получите то, что вам нужно:

String result = new String(reallyBigByteArrayValue, "UTF-8");
result.substring(result.indexOf("some-unique-text"));
user07
источник