开发手册 欢迎您!
软件开发者资料库

JDB - 步进

JDB Stepping - 从Eclipse的简介,安装,语法,选项,会话,基本命令,断点,步进,异常,JDB开始,简单易学地学习JDB。

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

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

  • 步骤:步骤到下一行执行

  • list:检查你在代码中的位置

  • cont:继续剩下的执行

示例

以下示例使用我们拥有的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()方法处停止.

Stepping1

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

步骤2:逐步执行代码

以下命令将执行步骤移至下一行.

  main [1] step

现在执行步骤为Line no :12.你会看到以下输出.

Stepping2

第3步:列出代码

以下命令列出代码:

  main [1] list

您将获得以下输出. List命令用于通知程序控件已达到的代码行.请注意以下屏幕截图中的箭头标记=>,显示程序控件的当前位置.

Stepping3

步骤4:继续执行

以下命令继续执行代码:

  main [1] cont

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

> Add:11The application exited\>

一般来说,有三种类型的步进:

  • Step Into

  • Step Over

  • Step Out

踏入

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

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

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);".在这一行,有一个函数调用加法(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);   }}

跳过

Step Over也执行下一行.但如果下一行是函数调用,它会在后台执行该函数并返回结果.

让我们举一个例子.在下面的代码中,箭头标记定义代码中的控件.

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);".在这一行中,有一个函数调用 addition(int,int)因此函数执行在后台完成,结果返回到带有箭头标记的当前行,如下所示: p>

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 Out

Step Out执行下一行.如果下一行是函数调用,它会跳过它,函数继续执行代码的剩余行.

让我们举一个例子.在下面的代码中,箭头标记在代码中定义控制器.

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);".在这一行中,有一个函数调用 addition(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);   }}