一、源代码:
话不多说,上老师的课程案例代码,本着要求最大值的需求写,结果出来的不是最大值,用debug来改。没改之前
package prectice;
public class DebugTest {
//输出两个数中最大值
public static void main (String[] args){
int i = 10;
int j = 20;
System.out.println("i = " + i + ",j = " + j);
DebugTest test = new DebugTest();
int max = test.getMax(i, j);
System.out.println("max = "+ max);
}
private int getMax(int k, int m ){
int max = 0;
if(k<m){
max = k;
}else {
max = m;
}
return max;
}
}
输出结果为如下,显然不是想要的结果:
二、调试程序有两种方式:
①、System.out.println();(太多代码的情况下,需要写很多syout语句,查完bug还需要删除syout语句,所以不适用)
②、Myeclipse(Eclipse)的debug调试
一般采用第二种方式调试:
调试步骤为:
1.设置断点(注意:可以设置多个断点)
2.debug as java application
3.常用操作:
step into 跳入【F5】(进入当前行所调用的方法中)
step over 跳过【F6】(执行完当前行的语句,进入下一行)
step return 跳回【F7】(执行完当前行所在的方法,进入下一行)
drop to frame (执行当前行所在方法的第一行)
resume 恢复 (执行完当前行所在断点的所有代码,进入下一个断点,如果没有就结束)
调试开始:
先设置两个断点:第一个断点:在”System.out.println("i = " + i + ",j = " + j);“
的代码行的数字标识处的外边双击两次,出现一个点,(第一个断点设置完成)
第二个断点:在“int max = test.getMax(i, j);”的代码行的数字标识处的外边双击两次,出现一个点,
(第二个断点设置完成)
将上面的源代码在Eclipse(Myeclipse)中右键单击Debug as-->Proceed-->Yes
目前程序运行到 第一个断点时,
有以下内存中加载有 (name列表下的)数组的形参,以及变量 i,j 后面的(value)变量值
Outlined显示的时当前类下的功能
在IDE工具栏有以下图标:
Step Into [F5] (进入方法中看方法的内容)
Step Over[F6](一行代码一行代码的往下走)
Step Return [F7] 是step into的逆过程,即从方法中出来
接下来点击step over ,就进入到DebugTest test = new DebugTest();这一行,(注意:只是到了这一行,但是还没开始执行)
因此,继续step over,可以看到DebugTest test = new DebugTest();这一行代码执行之后,在Variables栏目中的变量有了个新的变量(test)
这时(判断是方法体出错了,所以进入方法体测试),即运行完DebugTest test = new DebugTest();之后我们点击
step into [F5] 进入到getMax()方法中
此时再点击step over ,这时 Variables栏目多了个max变量,并且值为0 k==10, m==20
在源码中:k<m,正确,在点击step over 此时进入到 max = k; 光标移动到max 和k 处,看到k==10,
继续step over ,看到 Variables栏目多了个max变量,并且值为10, 因此可以知道是 max = k; 这个语句出现错误,
这个max赋值错误,需要把m赋值给max, k改成m即可.
检查结束,这是点击 step return 按钮,退出方法.
bug修改完毕可以点击调试终止,
如果想返回上一步,即step over之后,突然想起没看清刚才的变量,这时可以点击返回上一步操作.
当然, 如果后面还有断点,代码要测试,可以使用
这个按钮到达下一个断点处,继续检查bug.如果没有断点了,点这个按钮会使程序终止.