Що використовує налагоджувач Java в Intellij, що означає "Drop Frame"?


94

Я використовував налагоджувач Java в Intellij 8 і помітив кнопку з написом "drop frame", чи хтось знає, для чого це служить? Як / навіщо це використовуватиме / корисно?

Відповіді:


128

Стек викликів вашої програми можна переглянути у відладчику. Використовуючи функцію "Drop Frame", ви можете "повернутися" до попереднього кадру стека, в певному сенсі повертаючись у часі. Це може бути корисним для повторного введення функції, якщо ви пропустили критичне місце, яке ви хотіли б побачити ще раз.

Як випливає з назви "Stack Frame", зміни, які вже були внесені до глобального стану (наприклад, статичні змінні, зміни значень поля тощо), не будуть скасовані, скидаються лише локальні змінні. Це може призвести до іншого шляху виконання, ніж той, який спочатку призвів до точки розриву. Вам потрібно знати про це - я часто вважаю корисною функцією досліджувати різні шляхи виконання, не потребуючи перезавантаження програми чи певного тривалого процесу, що призвів до поточного стеку. У поєднанні зі зміною змінних значень, доступних також через налагоджувач, ви можете робити всілякі цікаві речі.

Зверніть увагу, що, звичайно, будь-які побічні ефекти, які могли виникнути - наприклад, мережевий трафік, маніпуляції файлами, вихід консолі тощо - не можуть бути повернені назад.


14

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

Більше інформації тут .


7

Видалення кадрів зі стека за допомогою налагоджувача по суті дозволяє "перемотати" виконання вашої програми для досягнення попереднього стану. Змінні поза рамкою стеку не повертаються.

Як зауваження, я вважаю, що ця функція в Eclipse називається " Перейти до кадру", але вона виконує ту саму мету.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.