Яка різниця між "Крок увімкнено" та "Крок за кроком" у відладчику Eclipse?


194

Я хочу налагодити весь потік програми Java. Яка різниця між F5(кроком у) та F6(переступом) у затемненні?


FWIW така сама логіка переходу / кроку на застосування до Xcode / Swift
Honey

Відповіді:


270

Розглянемо наступний код з вашим поточним вказівником інструкцій (рядок, який буде виконаний далі, позначений ->) у f(x)рядку в g(), викликаному g(2)рядком у 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
    }
}

Якщо б ви вступили в цей момент, ви перейдете до println()лінії f(), перейшовши на виклик функції.

Якщо ви перейшли в цей момент, ви перейдете до f(1)лінії g(), перейшовши через виклик функції.

Ще одна корисна особливість налагоджувачів - це вихід із кроку або повернення. У такому випадку повернення кроків в основному запустить вас через поточну функцію, поки ви не повернетесь назад на один рівень. Іншими словами, він переступить f(x)і f(1)повернеться до функції виклику, щоб закінчитися g(3)в main().

Eclipse (принаймні Європа, яка є єдиною, що мені зараз зручна) використовує F5для step into, F6для step overі F7для step return.


1
"потім поверніться до функції виклику, щоб закінчитися в g(3); в main()" <- Ви припускаючи , що ви отримали ваше поточне місце розташування з g(2)і як тільки ви все зробили ви повернутися до своєї наступної рядку g(3)?
Мед

1
@Honey, так, там була деяка неоднозначність (чи активний g(2)або g(3)дзвінок зараз), тому я прояснив це в першому абзаці. Дякую за голову вгору
paxdiablo

144

Під час налагодження рядків коду, ось звичайні сценарії:

  • ( Крок у нього ) Наближається метод, який потрібно налагодити в коді цього методу, тому наступним кроком є ​​перейти до цього методу і продовжувати налагодження крок за кроком.
  • ( Крок над ) Метод збирається застосувати, але ви не зацікавлені в налагодженні цього конкретного виклику, тому ви хочете, щоб налагоджувач повністю виконав цей метод як один цілий крок.
  • ( Повернення крок ) Ви виконали налагодження цього методу поетапно, і ви просто хочете, щоб налагоджувач запустив весь метод, поки він не повернеться як один цілий крок.
  • ( Резюме ) Ви хочете, щоб налагоджувач відновив "нормальне" виконання замість поетапного
  • ( Точка розриву рядка ) Вам не важливо, як він потрапив туди, але якщо виконання досягає певного рядка коду, ви хочете, щоб налагоджувач тимчасово призупинив виконання там, щоб ви могли вирішити, що робити.

Eclipse має інші вдосконалені функції налагодження, але це основні основи.

Дивитися також



5

Ви не можете переглядати деталі методу, скориставшись кроком. Якщо ви хочете пропустити поточний рядок, ви можете скористатися кроком, тоді вам потрібно лише натиснути кнопку F6лише один раз, щоб перейти до наступного рядка. І якщо ви думаєте, що в методі щось не так, використовуйте F5для вивчення деталей.


Отже, якщо я перейду, і якщо функція містить деякий оператор друку, станеться чи ні друк?
ім'я користувача_4567

2

Крок у наступний вираз у поточно вибраному рядку, який потрібно виконати, викликається, а виконання призупиняється на наступному виконуваному рядку методу, який викликається.

Крок над Вибраний на даний момент рядок виконується і призупиняється до наступного виконуваного рядка.

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