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

StackOverflow https://stackoverflow.com/questions/217116

Вопрос

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

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

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

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

Это было полезно?

Решение

Эта функция была добавлена в Eclipse версии 4.7 M2 под Ошибка Eclipse 40912.

Чтобы использовать его:

  • перешагните через return оператор (с использованием "Step Over" или "Step Return")
  • теперь первая строка в представлении переменной покажет результат выполнения оператора return, как "возвращенный [оператор xxx]:"

Видишь Проект Eclipse Oxygen (4,7) М2 - Новое и заслуживающее внимания за подробностями.

Другие советы

Нашел действительно хороший ярлык для этого. Выберите выражение, которое возвращает значение, и нажмите

Ctrl + Shift + D

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

Надеюсь, это поможет.

Примечание. Не проверялось это со сторонними библиотеками, но он хорошо работает для моего кода. Протестировано это в Eclipse Java EE IDE для веб-разработчиков. Версия: Juno Service Release 1

На самом деле это давняя ошибка в Eclipse, возникшая с самых первых дней IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912

Вот почему я всегда придерживаюсь следующего шаблона для методов:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

Мои правила:

<Ол>
  • Только одна инструкция возврата, только в конце метода (наконец, разрешено после него)
  • Всегда иметь локальный вызываемый результат, который содержит возвращаемое значение, начиная с значения по умолчанию.
  • Естественно, большинство тривиальных добытчиков освобождены.

    Мне тоже интересно узнать ответ на этот вопрос.

    В прошлом, когда я имел дело с такими сторонними библиотеками, я создавал класс-оболочку или дочерний класс, который делегировал родительскому классу, и выполнял отладку в классе-оболочке / дочернем классе. Это требует дополнительной работы.

    " Теперь, когда вы возвращаетесь из метода, в верхнем методе в представлении переменной он показывает возвращаемое значение ранее завершенного вызова " [1]

    [1] https: / /coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/

    Сложный. Мой опыт за пределами Eclipse заключается в том, что если вам может понадобиться увидеть возвращаемое значение, лучше назначить его локальной переменной в функции, чтобы оператор return был простым return varname; а не return (некоторые * выражения || другие); . Однако это не очень полезно для вас, поскольку вы говорите, что не можете (или не хотите) изменять или даже перекомпилировать код. Поэтому у меня нет хорошего ответа для вас - возможно, вам нужно пересмотреть свое требование.

    В зависимости от оператора return вы можете выделить возвращаемое выражение, и в контекстном меню должно быть что-то вроде " оценивать выражение " (У меня нет затмения передо мной сейчас, но это что-то вроде этого). Он покажет вам, что будет возвращено.

    Это немного притянуто за уши, но, поскольку простого способа, похоже, не существует:

    Вы могли бы использовать AspectJ, чтобы снабдить JAR аспектами, которые получают возвращаемое значение интересующих вас методов.Согласно документации Eclipse, программы AspectJ могут быть отлаженный как и другие программы.

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top