断点调试
零、小Tips
1. 在断点调试过程中,是运行状态,是以对象的运行类型来执行的
2. 将光标放到某个位置可以看到具体的数据
3. 断点可以在debug的过程中动态的下断点
A extendss B;
B b = new A();
b.xx();
当我们在调试b在调用xx方法的时候,是在按照运行类型来定位这个方法的,不能看编译类型
整个Debug过程中,看运行类型!!!
一、介绍
调试时程序就会运行到断点处,然后一步步向下调试,可以看到每一步的变量的当前值,出错的话会停下。
二、快捷键
F7 (跳入方法)
F8 (逐行执行代码)
shift + F8 (跳出方法)
F9 (resume,执行到下一个断点)
三、 示意图
四、实例
1. 变量变化(逐行执行下一步F8)
package debug;
public class Debug01 {
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
System.out.println("i = " + i);
System.out.println("sum = " + sum);
}
System.out.println("end...");
}
}
2.数组越界异常
public class Debug02 {
public static void main(String[] args) {
int arr[] ={1,10,-1};
for (int i = 0; i <= arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("退出for循环");
}
}
报错:
红色后面有一个蓝色的链接,一点击就会跳转到错误的位置
3. 如何追源代码(方法的跳入F7跳出shift + F8)
main => 另一方法 => 另一方法 F7
想回去,用shift + F8
package debug;
import java.util.Arrays;
public class Debug03 {
public static void main(String[] args) {
//dubug源码
int arr[] = {8,-1,199,70,10};
Arrays.sort(arr);
//程序,追入sort的底层实现->Debug
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
4. 直接执行到下一个断点(F9)(多线程的时候非常有用)
package debug;
import java.util.Arrays;
public class Debug04 {
public static void main(String[] args) {
int arr[] = {8,-1,199,70,10};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println("hello100");
System.out.println("hello200");
System.out.println("hello300");
System.out.println("hello400");
System.out.println("hello500");
System.out.println("hello600");
}
}
到达第一个断点停下,然后F9就可以直接执行到第二个断点处
这里的跳过不是中间的代码不执行了,而是不关注每一步数据是怎么变化的。
如果下一个断点进不去,那么他会去下一个断点,比如下图中第二个断点无法进入,那么就会直接进入下一个断点,比如此处的输出就是-1 8 10 70 199 hhh
感悟:如果我要看我的某一段方法有没有进入:
1. 在方法体内打断点
2. 运行程序
3. 如果进入的话,代码会自动跳到该断点处,因为他无法再执行下去了
五、练习
创建对象的流程:
- 加载Person类信息
- 初始化 2.1 默认初始化 2.2 显式初始化2.3构造器初始化
- 返回对象的地址