Могу ли я узнать возвращаемое значение перед возвращением во время отладки в Eclipse?
можно ли увидеть возвращаемое значение метода после запуска строки и до того, как указатель инструкции вернется к вызывающей функции?
Я отлаживаю код, который я не могу изменить (читай: не хочу перекомпилировать стороннюю библиотеку), и иногда он переходит к коду, у которого нет источника, или возвращаемое выражение имеет побочные эффекты, которые мешают мне просто запустить выражение в дисплей 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 могут быть отладка как и другие программы.
есть два варианта плетения классов без перекомпиляции библиотеки:
после компиляции ткачество, если обработка двоичной банки приемлема;
время загрузки ткачество, которое требует активации ткацкого агента в виртуальной машине.
смотрите документацию eclipse (ссылка выше), а также AspectJ Руководство По Среде Разработки.