Jaka jest różnica między Step Into i Step Over w debuggerze Eclipse?


194

Chcę debugować cały przepływ programu Java. Jaka jest różnica między F5(krokiem) a F6(krokiem) w zaćmieniu?


FWIW tę samą logikę krok po kroku / krok w kierunku stosuje się do Xcode / Swift
Honey

Odpowiedzi:


270

Rozważ następujący kod z bieżącym wskaźnikiem instrukcji (linia, która zostanie wykonana następnie, oznaczona przez ->) w f(x)linii w g(), ponieważ została wywołana przez g(2)linię w main():

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

Jeśli było krok w tym momencie, można przejść do println()linii f(), wchodząc do wywołania funkcji.

Jeśli były do kroku na tym punkcie, można przejść do f(1)linii g(), depcząc po wywołaniu funkcji.

Kolejną przydatną funkcją debuggerów jest wyjście lub powrót. W takim przypadku krok powrotny będzie zasadniczo przeprowadzał cię przez bieżącą funkcję, dopóki nie wrócisz o jeden poziom wyżej. Innymi słowy, będzie to krok po kroku f(x)i f(1), a następnie wycofać się do funkcji wywołującej skończyć się g(3)w main().

Zaćmienie (przynajmniej Europa, która w tej chwili jest jedyną, którą mam pod ręką) używa F5dla step into, F6dla step overi F7dla step return.


1
”, a następnie wróć do funkcji wywołującej, aby zakończyć się na g(3); w main()<- Czy zakładasz, że dotarłeś do bieżącej lokalizacji zg(2) a kiedy skończysz możesz powrócić do następnego wiersza g(3)?
Honey

1
@Honey, tak, to był jakiś tam dwuznaczność (czy g(2)lub g(3)połączenie jest aktualnie aktywne) więc mam wyczyszczone, że w pierwszym akapicie. Dzięki za heads-upy.
paxdiablo

144

Podczas debugowania wierszy kodu, oto typowe scenariusze:

  • ( Step Into ) Niedługo zostanie wywołana metoda, a Ty chcesz debugować kod jej metody, więc następnym krokiem jest przejście do tej metody i kontynuowanie debugowania krok po kroku.
  • ( Krok ponad ) Niedługo zostanie wywołana metoda, ale nie jesteś zainteresowany debugowaniem tego konkretnego wywołania, więc chcesz, aby debugger wykonał tę metodę całkowicie jako jeden krok.
  • ( Return Return ) Skończyłeś debugować tę metodę krok po kroku i chcesz, aby debugger uruchomił całą metodę, dopóki nie zwróci się jako jeden krok.
  • ( Wznów ) Chcesz, aby debugger wznawiał „normalne” wykonywanie zamiast krok po kroku
  • ( Punkt przerwania linii ) Nie obchodzi cię, jak się tam dostał, ale jeśli wykonanie osiągnie określoną linię kodu, chcesz, aby debugger tymczasowo wstrzymał wykonanie, abyś mógł zdecydować, co zrobić.

Eclipse ma inne zaawansowane funkcje debugowania, ale są to podstawowe podstawy.

Zobacz też



5

Nie możesz przejść do szczegółów tej metody, używając kroku krok po kroku. Jeśli chcesz pominąć bieżącą linię, możesz użyć kroku wstecz, wystarczy nacisnąć F6tylko raz, aby przejść do następnej linii. A jeśli uważasz, że w metodzie jest coś nie tak, skorzystaj z niej, F5aby sprawdzić szczegóły.


Więc jeśli zrobię krok do przodu i jeśli funkcja zawiera instrukcję print, czy drukowanie nastąpi, czy nie?
nazwa_użytkownika_4567

2

Krok do następnego Wywołane zostanie następne wyrażenie w aktualnie wybranej linii do wykonania, a wykonanie zawiesza się w kolejnej linii wykonywalnej w wywoływanej metodzie.

Step Over Aktualnie wybrana linia jest wykonywana i zawiesza się w następnej linii wykonywalnej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.