В чем разница между Step Into и Step Over в отладчике 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() .

«Затмение» (по крайней мере, «Европа», единственное, что мне сейчас удобно) использует 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для изучения деталей.


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

2

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.