步进(Stepping)
本章介绍如何在调试程序时使用Stepping的概念。 步进是调试器功能,允许您逐行逐步执行代码。 使用此方法,您可以检查代码的每一行,以确保它们按预期运行。
在步进过程中使用以下命令:
- 步骤:执行下一行的步骤
- list:检查您在代码中的位置
- cont:继续剩下的执行
例子 (Example)
以下示例使用我们在上一章中使用的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()方法中停止。
执行在main方法的第一行停止,即“int a = 5,b = 6;” 或代码中的第11行: 您可以在输出中观察此信息。
第2步:逐步完成代码
以下命令将执行步骤移至下一行。
main[1] step
现在执行步骤到行号:12。您将看到以下输出。
第3步:列出代码
以下命令列出了代码:
main[1] list
您将获得以下输出。 List命令用于通知程序控件已到达的代码行。 请注意以下屏幕截图中的箭头标记=>,其中显示了程序控件的当前位置。
第4步:继续执行
以下命令继续执行代码:
main[1] cont
此命令继续执行代码的其余行。 输出如下所示:
> Add:11
The 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);
}
}
如果使用step into命令,控制器将移动到下一行,即“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);
}
}
跳过
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);
}
}
如果使用step over命令,则控件移动到下一行,即“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);
}
}
走出去
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);
}
}
如果使用step out命令,控制器将移动到下一行,即“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);
}
}