В чем разница между Step Into и Step Over в отладчике Eclipse?

194

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

JavaUser
источник
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() .

«Затмение» (по крайней мере, «Европа», единственное, что мне сейчас удобно) использует F5для step into, F6для step overи F7для step return.

paxdiablo
источник
1
«затем обратно к вызывающей функции в конечном итоге на g(3), в main()» <- Вы предполагая , что вы получили ваше текущее местоположение с g(2)и как только вы все сделали вы вернуться к своей следующей строке g(3)?
Мед
1
@Honey, да, есть некоторая двусмысленность там (независимо от того g(2)или g(3)вызова активна в данный момент) , так что я очищен , что в первом абзаце. Спасибо за внимание.
paxdiablo
144

При отладке строк кода, вот обычные сценарии:

  • ( Шаг в ) Метод должен быть вызван, и вы хотите отладить код этого метода, поэтому следующий шаг - перейти к этому методу и продолжить пошаговую отладку.
  • ( Шаг за шагом ) Метод должен быть вызван, но вы не заинтересованы в отладке этого конкретного вызова, поэтому вы хотите, чтобы отладчик полностью выполнил этот метод как один полный шаг.
  • ( Возврат шага ) Вы закончили пошаговую отладку этого метода, и вы просто хотите, чтобы отладчик запускал весь метод, пока он не вернется как один полный шаг.
  • ( Резюме ) Вы хотите, чтобы отладчик возобновил «нормальное» выполнение вместо пошагового
  • ( Точка останова линии ) Вам все равно, как он туда попал, но если выполнение достигает определенной строки кода, вы хотите, чтобы отладчик временно приостановил выполнение, чтобы вы могли решить, что делать.

Eclipse имеет другие расширенные функции отладки, но это основные принципы.

Смотрите также

polygenelubricants
источник
22

step in будет копаться в вызовах методов
step over просто выполнит строку и перейдет к следующей

Жан-Бернар Пеллерен
источник
1
Как насчет "выйти"?
Корай Тугай
5

Вы не можете пройти через детали метода, используя шаг. Если вы хотите пропустить текущую строку, вы можете использовать шаг за шагом, тогда вам нужно только нажать F6только один раз, чтобы перейти к следующей строке. И если вы думаете, что в методе что-то не так, используйте F5для изучения деталей.

wanana
источник
Так что, если я сделаю шаг, и если функция содержит какое-то утверждение печати, произойдет печать или нет?
username_4567
2

Step Into Вызывается следующее выражение в текущей выбранной строке, которая должна быть выполнена, и выполнение приостанавливается на следующей исполняемой строке в вызываемом методе.

Шаг за шагом Выбранная в данный момент строка выполняется и приостанавливается на следующей исполняемой строке.

Йогеш Ядав
источник