Могу ли я узнать возвращаемое значение перед возвратом во время отладки в Eclipse?
Возможно ли увидеть возвращаемое значение метода после того, как строка была запущена и до того, как указатель инструкции вернется к вызывающей функции?
Я отлаживаю код, который я не могу изменить (читайте: не хотите перекомпилировать стороннюю библиотеку), а иногда он перескакивает на код, у меня нет источника, или выражение возврата имеет побочные эффекты, которые не позволяйте мне просто запустить выражение на вкладке "Экран".
Часто возвращаемое значение используется в составной инструкции, и поэтому представление Variables никогда не покажет мне значение (следовательно, желая увидеть результат до того, как управление вернется к вызывающей функции).
ОБНОВЛЕНИЕ: Я не могу использовать средство просмотра выражений, поскольку в заявлении есть побочные эффекты.
Ответы
Ответ 1
Эта функция была добавлена в Eclipse версии 4.7 M2 в Eclipse bug 40912.
Чтобы использовать это:
- перешагнуть через оператор
return
(используя "Step Over" или "Step Return") - теперь первая строка в представлении переменной будет показывать результат оператора return, как "[Statement xxx] return:"
См. Eclipse Project Oxygen (4.7) M2 - новый и заслуживающий внимания подробности.
Ответ 2
Нашел действительно хороший ярлык для этого.
Выберите выражение, которое возвращает значение, и нажмите
Ctrl + Shift + D
Это отобразит значение оператора return. Это действительно полезно в тех случаях, когда вы не можете или не хотите изменять только для цели отладки.
Надеюсь, что это поможет.
Примечание. Не тестировали это с сторонними библиотеками, но он отлично работает для моего кода.
Протестировано на Eclipse Java EE IDE для веб-разработчиков. Версия: Juno Service Release 1
Ответ 3
Вот почему я всегда придерживаюсь следующего шаблона для методов:
MyReturnedType foo() {
MyReturnedType result = null;
// do your stuff, modify the result or not
return result;
}
Мои правила:
- Только один оператор return, только в конце метода (окончательно разрешенный после него)
- Всегда иметь локальный вызванный результат, который содержит возвращаемое значение, начиная с значения по умолчанию.
Естественно, что самые тривиальные геттеры освобождены.
Ответ 4
На самом деле это долгая ошибка в Eclipse, начиная с первых дней работы среды IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
Ответ 5
Мне также интересно узнать ответ на этот вопрос.
В прошлом, имея дело с сторонней библиотекой, я делал это, чтобы создать класс-оболочку или дочерний класс, которые делегируют родительский класс и выполняют мою отладку в классе wrapper/child. Это требует дополнительной работы.
Ответ 6
Жесткий. Мой опыт, вне Eclipse, заключается в том, что если вам может понадобиться увидеть возвращаемое значение, лучше назначить его локальной переменной в функции, чтобы оператор return был простым return varname;
, а не return(some * expression || other);
. Тем не менее, это не очень полезно для вас, поскольку вы говорите, что не можете (или не хотите) изменять или даже перекомпилировать код. Итак, у меня нет хорошего ответа для вас - возможно, вам нужно пересмотреть свое требование.
Ответ 7
В зависимости от оператора return вы можете выделить выражение, которое возвращается, и из контекстного меню, должно быть что-то вроде "оценивать выражение" (сейчас у меня нет затмения передо мной, но это что-то вроде того). Он покажет вам, что будет возвращено.
Ответ 8
Это немного надуманно, но, как кажется, нет простого способа:
Вы можете использовать AspectJ для инструмента JAR с аспектами, которые улавливают возвращаемое значение методов, которые вас интересуют. Согласно документации Eclipse, программы AspectJ могут быть отлаживается, как и другие программы.
Существует два способа сплести ваши классы без перекомпиляции библиотеки:
-
Послекомпилировать плетение, если обработка двоичного JAR приемлема,
-
Время загрузки, которое требует активации ткачества в виртуальной машине.
См. документацию по eclipse (ссылка выше), а также Руководство по среде разработки AspectJ.
Ответ 9
"Теперь, когда вы возвращаетесь из метода, в верхнем методе в представлении переменной он показывает возвращаемое значение ранее завершенного вызова" [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/