Можно ли увидеть возвращаемое значение метода после выполнения строки и до того, как указатель инструкции вернется в вызывающую функцию?
Я отлаживаю код, который не могу изменить (читайте: не хочу повторно компилировать стороннюю библиотеку) , и иногда он переходит к коду, для которого у меня нет источника, или возвращаемое выражение имеет побочные эффекты, которые мешают мне быть возможность просто запустить выражение на вкладке Display .
Часто возвращаемое значение используется в составном операторе, поэтому представление переменных никогда не покажет мне значение (следовательно, я хочу увидеть результат до того, как управление вернется к вызывающей функции).
ОБНОВЛЕНИЕ: я не могу использовать средство просмотра выражений, так как в инструкции есть побочные эффекты.
источник
Ответы:
Эта функция была добавлена в Eclipse версии 4.7 M2 под ошибкой Eclipse 40912 .
Чтобы использовать это:
return
инструкцию (используя «Step Over» или «Step Return»)См. Подробности в Eclipse Project Oxygen (4.7) M2 - Новое и заслуживающее внимания .
источник
Нашел действительно хороший ярлык для этого. Выберите выражение, которое возвращает значение, и нажмите
Это отобразит значение оператора возврата. Это действительно полезно в тех случаях, когда вы не можете или не хотите вносить изменения только в целях отладки.
Надеюсь это поможет.
Примечание: не тестировал это со сторонними библиотеками, но с моим кодом он работает нормально. Проверено на Eclipse Java EE IDE для веб-разработчиков. Версия: Juno Service Release 1
источник
Ctrl + Shift + I
был также полезен для меня.return System.currentTimeMillis();
, вы получите другой результат, чем фактически возвращенная функция!Apple machine
?На самом деле это давняя ошибка в Eclipse, возникшая с самых первых дней IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
источник
Вот почему я всегда придерживаюсь следующего шаблона для методов:
Мои правила:
Естественно, самые тривиальные геттеры не облагаются налогом.
источник
Мне также любопытно узнать ответ на этот вопрос.
Раньше, имея дело с подобной сторонней библиотекой, я создавал класс-оболочку или дочерний класс, который делегировал родительскому классу и выполнял отладку в классе-оболочке / дочернем классе. Однако это требует дополнительной работы.
источник
«Теперь, когда вы возвращаетесь из метода, в верхнем методе в представлении переменных отображается возвращаемое значение ранее завершенного вызова» [1]
[1] https://coffeeorientprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
источник
Крепкий орешек. Мой опыт вне Eclipse показывает, что если вам может потребоваться увидеть возвращаемое значение, лучше всего назначить его локальной переменной в функции, чтобы оператор return был простым,
return varname;
а не непростымreturn(some * expression || other);
. Однако это не очень полезно для вас, поскольку вы говорите, что не можете (или не хотите) изменять или даже перекомпилировать код. Итак, у меня нет для вас хорошего ответа - возможно, вам нужно пересмотреть свое требование.источник
В зависимости от оператора return вы можете выделить возвращаемое выражение, а из контекстного меню должно быть что-то вроде «оценивать выражение» (сейчас передо мной нет затмения, но это что-то вроде этого ). Он покажет вам, что нужно вернуть.
источник
Это немного надумано, но, похоже, нет простого способа:
Вы можете использовать AspectJ для оснащения JAR аспектами, которые получают возвращаемое значение методов, которые вас интересуют. Согласно документации Eclipse, программы AspectJ можно отлаживать, как и другие программы.
Есть два варианта создания ваших классов без перекомпиляции библиотеки:
Посткомпиляционное переплетение, если обработка двоичного JAR приемлема;
Ткачество во время загрузки, которое требует активации агента ткачества в виртуальной машине.
См. Документацию по eclipse (ссылка выше), а также Руководство по среде разработки AspectJ .
источник