Что означает «Drop Frame» при использовании отладчика Java в Intellij?


96

Я использовал отладчик Java в Intellij 8 и заметил кнопку с надписью «drop frame». Кто-нибудь знает, для чего это служит? Как / почему это может быть использовано / полезно?

Ответы:


131

Стек вызовов вашего приложения можно просмотреть в отладчике. Используя функцию «Drop Frame», вы можете «вернуться» к предыдущему кадру стека, в некотором смысле вернувшись назад во времени. Это может быть полезно для повторного ввода функции, если вы пропустили критическое место, которое хотели бы увидеть снова.

Как следует из названия «Stack Frame», изменения, которые уже были внесены в глобальное состояние (например, статические переменные, изменения значений полей и т.п.), не будут отменены, сбрасываются только локальные переменные. Это может привести к другому пути выполнения, чем тот, который изначально привел к вашей точке останова. Вы должны знать об этом - я часто считаю полезной возможность исследовать различные пути выполнения без перезапуска приложения или конкретного длительного процесса, который привел к текущему стеку. В сочетании с изменением значений переменных, также доступным через отладчик, вы можете делать всевозможные интересные вещи.

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


15

Drop Frame в отладчике выталкивает текущий кадр стека и возвращает управление вызывающему методу, сбрасывая все локальные переменные. Это очень полезно для многократного выполнения функции, но имейте в виду: мутации полей или глобальные изменения состояния останутся.

См. Дополнительную информацию здесь .


8

Удаление кадров из стека с помощью отладчика по существу позволяет вам «перемотать» выполнение вашего приложения, чтобы достичь предыдущего состояния. Переменные вне кадра стека не возвращаются.

Кстати, я считаю, что эта функция в Eclipse называется «Drop to Frame», но она служит той же цели.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.