Używałem debuggera Java w Intellij 8 i zauważyłem przycisk oznaczony „opuszczaną ramką”. Czy ktoś wie, czemu to służy? Jak / dlaczego miałoby to być używane / przydatne?
źródło
Używałem debuggera Java w Intellij 8 i zauważyłem przycisk oznaczony „opuszczaną ramką”. Czy ktoś wie, czemu to służy? Jak / dlaczego miałoby to być używane / przydatne?
Stos wywołań aplikacji można wyświetlić w debugerze. Używając funkcji „Drop Frame”, możesz „cofnąć się” do poprzedniej ramki stosu, w pewnym sensie cofając się w czasie. Może to być pomocne, aby ponownie wprowadzić funkcję, jeśli przegapiłeś krytyczne miejsce, które chciałbyś ponownie zobaczyć.
Jak sugeruje nazwa „Stack Frame”, zmiany, które zostały już wprowadzone w stanie globalnym (takie jak zmienne statyczne, zmiany wartości pól itp.) Nie zostaną cofnięte, tylko zmienne lokalne zostaną zresetowane. Może to prowadzić do innej ścieżki wykonania niż ta, która pierwotnie doprowadziła do punktu przerwania. Musisz być tego świadomy - często uważam za przydatną funkcję eksploracji różnych ścieżek wykonania bez konieczności ponownego uruchamiania aplikacji lub konkretnego długotrwałego procesu, który doprowadził do bieżącego stosu. W połączeniu ze zmianą wartości zmiennych, również dostępnych w debugerze, możesz robić wiele interesujących rzeczy.
Należy pamiętać, że oczywiście żadnych skutków ubocznych, które mogły wystąpić - np. Ruchu sieciowego, manipulacji plikami, danych wyjściowych konsoli itp. - nie można przewinąć.
Drop Frame w debugerze powoduje pobranie bieżącej ramki stosu i przekazanie kontroli z powrotem do metody wywołującej, resetując wszelkie zmienne lokalne. Jest to bardzo przydatne do wielokrotnego przechodzenia przez funkcję, ale pamiętaj: mutacje pola lub globalne zmiany stanu pozostaną.
Zobacz więcej informacji tutaj .
Usuwanie ramek ze stosu za pomocą debugera zasadniczo umożliwia „przewijanie” wykonywania aplikacji w celu osiągnięcia poprzedniego stanu. Zmienne poza ramką stosu nie są przywracane.
Na marginesie, uważam, że ta funkcja w Eclipse nazywa się „Upuść do ramki”, ale służy temu samemu celowi.