断点调试(debug)
简介
1. 断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个Bug。
2. 断点调试是程序员必须掌握的技能。
3. 断点调试也能帮助我们查看Java底层源代码的执行过程,提高程序员的Java水平。
注:在断点调试的过程中,是运行状态,是以对象的运行状态来执行的。
快捷键
F7(跳入方法内) F8(逐行执行代码) shift + F8(跳出方法) F9(resume,执行到下一个断点)
调试异常
int[] a = {1,2,3};
for(int i = 0 ; i<4;i++ ){
System.out.println(a[i]); //在i=3时会报错
}
查看源码
方法1:使用 foce step into : 快捷键为 alt + shift +F7。
方法2:Settings --> Build,Execution,Deployment --> Debugger --> Stepping,把 Do not step into the classes 中的 java.* 和 javax.* 取消勾选。然后用Step into(F7)即可进入方法。
退出方法查看用Step out(shift + F8)。
语句跳跃
用 Resume Program(F9)可以将Debug跳转到下一个断点,中间的语句直接执行。值得一提的是——1. 可以用Step into 进入方法后,在方法里设置断点。2. 在Debug过程中也可以设置断点。
对象断点的应用
1. 可以用Debug查看对象创建的过程。
用Step into 进入该对象中查看具体初始化方法。
默认初始化:
显示初始化:
构造器:
2. 可以用断点调试一步步查找到调用的方法。
用Step into进入 println 方法。
再用Step into方法进入 valueOf 这个方法。
发现 valueOf 调用了 toString 方法,用Step into进入 toString 方法。
最终找到了在Person类中重写的 toString 方法。
3. 还可以用断点调试验证动态绑定机制
public class Person {
public void run(){
System.out.println("人类跑步");
}
} //父类
public class Student extends Person{
public void run(){
System.out.println("学生跑步");
}
}//子类
public static void main(String[] args) {
Person a = new Student();//向上转型
a.run(); //Step into
}
Step into后发现调用的是学生的方法。按照向上转型的理论,不能调用子类独有的成员。当调用run方法时,根据动态绑定机制先从子类查找,而调用属性时,没有动态绑定,根据编译类型。