运行程序,没有报错(出现异常),但结果不正确,这种时候,错误很难定位,就需要借助Debug工具,(或者系统比较大的时候,某个地方出错,很难定位)
如何调试程序: ① 方式一:System.out.println(),边看边输出,只适合程序不大的时候 ② 方式二:Eclipse - Debug调试功能
详细解释:
step over:执行完当前这一行的语句,进入到下一行语句(还没执行下一行);
step into:进入当前行所调用的方法内部; 【如果一行代码是调用方法,那么step into是进入方法内部(可以一行一行执行方法内的代码),step over则是直接执行完该行代码(即:方法整个执行完并且得到相应返回值)】
step return:在step into进入某方法内部时,已经检查的差不多了(通常不用整个方法都检测是否有错),想要返回到原先程序流程中,就用step return;
drop to frame:在step into进入某方法内部时,通过step over一步一步执行,可能某一步没看清楚,想再看一遍,就使用drop to frame回到该方法起始位置,可以重新再来推进;
resume:推进到下一个断点处,如果没有断点了就执行到程序结束; 【程序执行过程中的输入操作,也会阻塞(要等待用户输入),并不是点了resume就会到达下一个断点】
terminate:直接终止程序,不看了;
测试代码 1:
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; } }测试代码 2:
public class DebugTest1 { public static void main(String[] args) { int[] arr = new int[] {1,2,3,4,5}; System.out.println(arr); //输出的是地址值 char[] arr1 = new char[] {'a','b','c'}; System.out.println(arr1); //输出的是字符串"abc" } } 之前测试的时候,发现同为基本数据类型,int[] arr 等执行System.out.println(arr); 输出的就是地址值,但是 char[] arr1 输出的是字符串"abc";当时就已经知道调用的是重载方法,现在则可以通过debug再次验证:通过step into发现,进入的是不同的方法,int[] arr 执行 System.out.println(arr); 进入的是 println(Object x) ,而 char[] arr1 进入的是 println(char x[]);右键 —> Debug As —> Debug Configurations 选择JRE(如果有问题,很可能就是这里的jre选择错误) —> Installed JREs 接下来就是 Remove 掉原来的jre,然后 Add 中添加 Standard VM,找到jdk的目录并确认,并把对勾打上,就可以了