Могу ли я узнать возвращаемое значение перед возвращением во время отладки в Eclipse?
можно ли увидеть возвращаемое значение метода после запуска строки и до того, как указатель инструкции вернется к вызывающей функции?
Я отлаживаю код, который я не могу изменить (read: не хотите повторно компилировать стороннюю библиотеку), и иногда он переходит к коду, к которому у меня нет источника, или выражение возврата имеет побочные эффекты, которые мешают мне просто запустить выражение в дисплей tab.
часто возвращаемое значение используется в составном операторе, поэтому переменные view никогда не покажет мне значение (следовательно, желая увидеть результат до того, как элемент управления вернется к вызывающей функции).
обновление: я не могу использовать средство просмотра выражений, поскольку в инструкции есть побочные эффекты.
8 ответов
эта функция была добавлена в Eclipse версии 4.7 M2 под ошибка затмения 40912.
нашел действительно хороший ярлык для этого. Выберите выражение, которое возвращает значение и нажмите клавишу
Ctrl + Shift + D
это отобразит значение оператора return. Это действительно полезно в случаях, когда вы не можете или не хотите меняться только для целей отладки.
надеюсь, что это помогает.
Примечание: не протестировали это со сторонними библиотеками, но он отлично работает для моего кода. Протестировал это на Eclipse Java EE IDE для веб-разработчиков. Версия: Juno Service Release 1
вот почему я всегда придерживаюсь следующего шаблона для методов:
MyReturnedType foo() {
MyReturnedType result = null;
// do your stuff, modify the result or not
return result;
}
мои правила:
- только один оператор возврата, только в конце метода (наконец, разрешено после него)
- всегда есть локальный результат, который содержит возвращаемое значение, начиная с значения по умолчанию.
естественно, самые тривиальные геттеры освобождаются.
Это на самом деле давняя ошибка в Eclipse, начиная с самых первых дней IDE:https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
Мне любопытно узнать ответ на этот вопрос.
в прошлом, когда я имел дело с сторонней библиотекой, как это, то, что я сделал, это создать класс-оболочку или дочерний класс, который делегирует родительскому классу и выполняет отладку в классе-оболочке/дочернем классе. Это требует дополнительной работы.
в зависимости от оператора return вы можете выделить выражение, которое возвращается, и из меню правой кнопки мыши должно быть что-то вроде "оценить выражение" (у меня сейчас нет eclipse, но это что-то вроде этого). Он покажет вам, что будет возвращено.
сложный вопрос. Мой опыт, за пределами Eclipse, заключается в том, что если вам может потребоваться увидеть возвращаемое значение, лучше всего назначить его локальной переменной в функции, чтобы оператор return был простым return varname;
, а не return(some * expression || other);
. Однако это не очень полезно для вас, так как вы говорите, что не можете (или не хотите) изменять или даже перекомпилировать код. Итак, у меня нет хорошего ответа для вас - возможно, вам нужно пересмотреть свое требование.
Это немного притянуто за уши, но поскольку, похоже, нет простого способа:
вы можете использовать AspectJ для инструмента JAR с аспектами, которые получают возвращаемое значение методов, которые вас интересуют. Согласно документации Eclipse, программы AspectJ могут быть отладка как и другие программы.
существует два варианта плетения ваших классов без перекомпиляции библиотеки:
ткачество после компиляции, если обработка бинарного JAR приемлема;
время загрузки ткачество, которое требует активации ткацкого агента в виртуальной машине.
см. документацию eclipse (ссылка выше), а также AspectJ Руководство По Среде Разработки.