При использовании отладчика Java в Intellij, что означает «Drop Frame»? - PullRequest
84 голосов
/ 03 марта 2010

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

Ответы [ 3 ]

110 голосов
/ 03 марта 2010

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

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

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

13 голосов
/ 03 марта 2010

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

Подробнее здесь .

6 голосов
/ 03 марта 2010

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

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

...