【问题标题】:What is the difference between Step Into and Step Over in a debugger调试器中的 Step Into 和 Step Over 有什么区别
【发布时间】:2011-04-04 14:07:34
【问题描述】:

我想调试 (Java) 程序的整个流程。我看到通过我的程序步进有几个选项。 step intostep over有什么区别?

【问题讨论】:

    标签: debugging


    【解决方案1】:

    g() 中的f(x) 行中使用当前指令指针(将要执行的行,由-> 指示)考虑以下代码,已被@987654325 中的g(2) 行调用@:

    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
        }
    }
    

    如果您要在此时进入,您将移至f() 中的println() 行,进入函数调用。

    如果此时您要跨步,您将移至g() 中的f(1) 行,跨过函数调用。

    调试器的另一个有用的特性是 step out of 或 step return。 在这种情况下,step return 基本上会运行你当前的函数,直到你返回上一级。换句话说,它将逐步遍历f(x)f(1),然后返回到调用函数以在main() 中的g(3) 结束。

    【讨论】:

    • "然后返回到调用函数以在g(3) 结束;在main()" 你是否假设你已经到了你的 当前位置来自g(2),一旦你完成了你返回到下一行g(3)?
    • @Honey,是的,那里有一些模棱两可的地方(g(2)g(3) 呼叫当前是否有效)所以我已经在第一段中清除了这一点。感谢您的提醒。
    【解决方案2】:

    调试代码行时,常见的场景如下:

    步入

    一个方法即将被调用,你想调试到那个方法的代码,所以下一步就是进入那个方法,一步一步继续调试。

    跳过

    一个方法即将被调用,但您对调试这个特定的调用不感兴趣,因此您希望调试器将该方法作为一个完整的步骤完全执行。

    步骤返回

    您已逐步调试此方法,您只希望调试器运行整个方法,直到它作为一个完整步骤返回。

    简历

    您希望调试器恢复“正常”执行而不是逐步执行

    行断点

    您并不关心它是如何到达那里的,但是如果执行到了特定的代码行,您希望调试器暂时暂停那里的执行,以便您决定要做什么。

    Eclipse 具有其他高级调试功能,但这些是基本原理。

    另见

    【讨论】:

      【解决方案3】:

      step into 将深入研究方法调用
      step over 只会执行该行并转到下一个

      【讨论】:

      • “走出去”怎么样?
      【解决方案4】:

      您无法通过使用 step over 来了解该方法的详细信息。 如果要跳过当前行,可以使用step over,然后只需按一次F6就可以移动到下一行。 如果您认为该方法有问题,请使用 F5 查看详细信息。

      【讨论】:

      • 所以如果我跳过并且如果函数包含一些打印语句,打印是否会发生?
      【解决方案5】:

      Step Into 调用当前选定行上要执行的下一个表达式,并在被调用方法中的下一个可执行行处暂停执行。

      Step Over 执行当前选定的行并在下一个可执行行暂停。

      【讨论】:

        【解决方案6】:

        与调试器通信的方法

        (或者,我如何向祖母解释我的公路旅行)

        Step Into: "当下一条要执行的语句到达方法调用时,不要将方法作为一个整体执行,而是执行该方法的第一行并停止"

        Step Over:“当下一条要执行的语句到达方法调用时,将方法作为一个整体执行并停止”

        Step Out:“结束执行被调用者的代码,并在执行返回调用者时停止”

        继续:“执行到下一个断点”

        这是一个很好的例子来实际演示上述概念:

        【讨论】:

          猜你喜欢
          • 2019-02-21
          • 2020-04-20
          • 2018-03-13
          • 1970-01-01
          • 2011-07-20
          • 2012-12-07
          • 1970-01-01
          • 2019-08-20
          • 2016-11-15
          相关资源
          最近更新 更多