📜  JDB-步进

📅  最后修改于: 2020-11-13 04:48:08             🧑  作者: Mango


本章介绍了如何在调试程序时使用步进的概念。步进是调试器功能,可让您逐行逐步执行代码。使用此功能,您可以检查代码的每一行,以确保它们的行为符合预期。

在步进过程中使用以下命令:

  • 步骤:执行下一行
  • 列表:检查您在代码中的位置
  • 续:继续执行剩余的内容

下面的示例使用上一章中使用的Add类:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

将上面的文件另存为Add.java。使用以下命令编译该文件:

\>javac Add.java

让我们假设断点是在Add类的main()方法上设置的。以下步骤显示如何在Add类中应用步进。

步骤1:执行工作

以下命令开始执行名为Add的类。

> run Add

如果执行此命令,将看到以下输出。在此输出中,您可以发现执行在断点位置即main()方法处停止。

步进1

执行在main方法的第一行停止,即“ int a = 5,b = 6;”。或代码中的第11行。您可以在输出中观察此信息。

步骤2:逐步执行程式码

以下命令将执行移至下一行。

main[1] step

现在执行步骤转到第No行:12.您将看到以下输出。

踏步2

步骤3:列出代码

以下命令列出了代码:

main[1] list

您将获得以下输出。 List命令用于使您知道代码中到达程序控件的那一行。请注意以下屏幕快照中的箭头标记=>,该箭头显示了程序控件的当前位置。

踏步3

步骤4:继续执行

以下命令继续执行代码:

main[1] cont

该命令继续执行代码的其余行。输出如下所示:

> Add:11
The application exited
\>

通常,有三种类型的步进:

  • 步入
  • 越过
  • 走出去

步入

使用此命令,您可以单步执行代码的下一行。如果代码的下一行是函数调用,那么它将通过驱动该函数顶部的控件进入该函数。

在以下代码中,箭头标记定义了代码中的控制器。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

如果使用step into命令,则控制器将移至下一行,即“ int c = ob.addition(a,b);”。在此行上,有一个函数调用additional(int,int),因此控制器移至带有箭头标记的加法函数的最上一行,如下所示:

public class Add
{
   public int addition( int x, int y)
-> {
      int z = x + y;
      return z;
   }
      
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

越过

单步执行还会执行下一行。但是,如果下一行是函数调用,它将在后台执行该函数并返回结果。

让我们举个例子。在以下代码中,箭头标记定义了代码中的控件。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

如果使用step over命令,则控制移至下一行,即“ int c = ob.addition(a,b);”。在此行中,有一个函数调用additional(int,int),因此该函数在后台执行,并且结果用箭头标记返回到当前行,如下所示:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

走出去

跳出执行下一行。如果下一行是函数调用,则将其跳过,并且函数执行将继续执行代码的其余行。

让我们举个例子。在以下代码中,箭头标记在代码中定义了控制器。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

如果使用单执行命令,则控制器将移至下一行,即“ int c = ob.addition(a,b);”。在这一行中,有一个函数调用additional(int,int),因此该函数执行被跳过,其余执行继续带有箭头标记,如下所示:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}