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


можно ли увидеть возвращаемое значение метода после запуска строки и до того, как указатель инструкции вернется к вызывающей функции?

Я отлаживаю код, который я не могу изменить (читай: не хочу перекомпилировать стороннюю библиотеку), и иногда он переходит к коду, у которого нет источника, или возвращаемое выражение имеет побочные эффекты, которые мешают мне просто запустить выражение в дисплей tab.

часто возвращаемое значение используется в составном операторе, и поэтому переменные view никогда не покажет мне значение (следовательно, желая увидеть результат до того, как управление вернется к вызывающей функции).

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

8 95

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;
}

мои правила:

  1. только один оператор возврата, только в конце метода (наконец разрешено после него)
  2. всегда есть локальный вызываемый результат, который содержит возвращаемое значение, начиная с значения по умолчанию.

естественно, самые тривиальные геттеры освобождаются.

Это на самом деле давняя ошибка в 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 могут быть отладка как и другие программы.

есть два варианта плетения классов без перекомпиляции библиотеки:

  • после компиляции ткачество, если обработка двоичной банки приемлема;

  • время загрузки ткачество, которое требует активации ткацкого агента в виртуальной машине.

смотрите документацию eclipse (ссылка выше), а также AspectJ Руководство По Среде Разработки.