Могу ли я узнать возвращаемое значение перед возвратом при отладке в Intellij?

127

С участием:

Object method(){
    ...
    return /* some complex expression */
}

Есть ли способ узнать, какое значение будет возвращено при отладке? Как-то установить точку останова, которая будет достигнута сразу после возврата, но до того, как выполнение перейдет к вызывающему коду? Я хотел бы знать, что такое возвращаемое значение, а также иметь возможность видеть, каковы значения всех локальных переменных.

Как мне сделать это сейчас, сделав временную переменную: Object ret = /* something complex */; return ret;. Но это хлопотно, а также добавляет лишнюю ненужную строку кода.

Примечание. Это тот же вопрос, что и « Могу ли я узнать возвращаемое значение перед возвратом при отладке в Visual Studio» , но для intellij.

рукав моря
источник

Ответы:

31

Кажется, есть несколько способов сделать это. Первый включает установку точки останова в сигнатуре метода, в вашем случае вы должны установить точку останова на методе Object () {. Это позволит вам следить за входом и выходом из метода. Я считаю, что вы должны использовать это в сочетании с « Возвращаемыми значениями метода наблюдения», как указано выше, но я не смог полностью протестировать это, так как это занимает слишком много времени для вычисления. Остерегайтесь, это резко снижает производительность отладчика и требует больше времени для отладки.

Также вы можете сделать следующее вручную.

  1. Установите точку останова на обратной линии.
  2. При попадании в строку возврата щелкните строку возврата, специально поместите курсор на операцию, которую вы хотите увидеть, затем перейдите в Run-> Evaluate Expression (или Alt-F8), и выражение должно быть выполнено в этой точке и вернуть то, что он возвращает.

Примечание . Если вы создаете точку останова, вы можете указать IDEA много чего делать с ними, например, если вы прерываете точку останова, вы можете сказать им выполнить выражение и записать его. Вы можете посмотреть, что можно сделать, если щелкнуть правой кнопкой мыши точку останова и выбрать свойства.

ОБНОВЛЕНИЕ : попробуйте это в сочетании с первым способом. Не используйте функцию «Наблюдать за возвращаемыми значениями метода», поскольку это может замедлить или заморозить сеанс отладки. Вместо этого сделайте следующее

  1. Щелкните правой кнопкой мыши возвращаемое выражение, которое вы хотите просмотреть, и нажмите «Добавить в наблюдения».
  2. Затем добавьте точку останова метода, как указано выше.
  3. Отлаживайте свою программу, и ваш метод сломается в сигнатуре метода.
  4. Нажмите клавишу F9 для продолжения, и он должен снова прерваться ПОСЛЕ вычисления возвращаемого выражения, и ваше возвращаемое выражение должно быть в столбце наблюдения.

Помните, что точки останова для метода работают медленнее, поэтому может потребоваться больше времени, хитрый способ улучшить это, если вы замечаете слишком большое снижение производительности, - это просто установить точку останова оператора return (без точки останова метода), а затем добавить точку останова метода ПОСЛЕ того, как сработает точка останова оператора возврата, а затем продолжится.

Надеюсь это поможет,

jluzwick
источник
1
Фактически, как только вы добавили точку останова и часы в (new X ()), вы можете просто нажать Alt + F8 на этих часах, чтобы «проанализировать» возвращенный объект. Это действительно полезно.
Кедар Мхасваде
Если я правильно понимаю, предлагаемое здесь решение работает только в том случае, если выражение не имеет побочных эффектов. Я определенно не рекомендую помещать сложные выражения в окно переменных / просмотра в целом.
Mashmagar 01
По крайней мере, начиная с версии 2016.3, есть способ лучше. См. Ответ от Birchlabs для подробностей. Теперь это должен быть принятый ответ.
Mikezx6r
151

В IntelliJ IDEA 2016.3: он скрыт внутри кнопки cog на панели отладки. Убедитесь, что Show Method Return Valuesустановлен флажок .

IntelliJ IDEA 2016.3 «Показать возвращаемые значения метода»

Используйте отладчик, чтобы прервать работу функции, возвращаемое значение которой вы хотели бы видеть.

войти в функцию

Выйдите из функции (или перейдите, пока не сбежите):

выйти

Обратите внимание, что возвращаемое значение появляется в ваших переменных:

соблюдать возвращаемое значение

Birchlabs
источник
3
@Stan Я обновил свой ответ, чтобы предоставить рабочий пример.
Birchlabs
40

На панели отладчика есть кнопка Наблюдать за возвращаемыми значениями метода .

Наблюдать за возвращаемыми значениями метода : нажмите эту кнопку, чтобы просмотреть возвращаемые значения последнего выполненного метода.

возвращаемые значения метода часов

Конфигурация IDEA 12:

ИДЕЯ 12

CrazyCoder
источник
2
Кажется, что ничего не отображается ни на вкладке «Переменные», ни на вкладке «Наблюдения». Если это важно, я использую Groovy. Кроме того, похоже, что будет отображаться возвращаемое значение последнего метода, выполненного из контекста вызывающего кода, а не из контекста самого метода. Важное отличие этого состоит в том, что если вы можете увидеть это из контекста самого метода, вы также можете посмотреть значения локальных переменных метода. Это может позволить вам увидеть, что пошло не так, если метод возвращает неверное значение.
Кайл
3
Он показывает возвращаемое значение на панели «Переменные» (с использованием полного имени метода). Это должен был быть принятый ответ. @CrazyCoder +1 от меня :-)
Омри Спектор
4
@CrazyCoder: Эта функция все еще существует в IDEA 13? Я не могу найти это.
kevinarpe
1
Я использую Intellij 15 и тоже этого не вижу. Можете выложить скриншот?
Санджив Дживан,
3
в январе 2017 года (идея 2016.3.2): вы должны щелкнуть значок настроек (шестеренка, прямо над желтым элементом меню на втором изображении), появится меню, включающее «Показать возвращаемые значения метода». Не нужно ничего перезапускать: после следующего возврата из метода его ObjectClassName.methodName () появляется в представлении переменных прямо под этим .
18446744073709551615
1

Об этом спросили некоторое время назад, но я использую другой метод, когда хочу справиться с этой ситуацией.

При отладке вы можете пометить выражение (в вашем случае выражение сразу после «возврата») и нажать CTRL + ALT + F8 (Quick Evaluate Expression). IntelliJ откроет небольшое окно, в котором будет показано возвращаемое значение.

unlimitednzt
источник
2
Если вы используете графический чип Intel, это сочетание клавиш отключит ваши вторичные мониторы .
Coli
1
Пользователи Linux: Ctrl + Alt + F8 - отправит пользователя на второй терминал графического интерфейса. В Ubuntu я нажал Ctrl + Alt + F2, чтобы вернуться.
Дмитрий Павлухин