介绍:断点调试是指在程序的某一行设置一个断电,调试时,程序运行到这一行就会停住,然后可以一步步往下调试,调试过程中可以看到各个变量当前的值,如果出错的话,调试到出错的代码行就会显示错,进行分析从而找到这个bug。
快捷键:F7(跳入:跳入方法内),F8(跳过:逐行执行代码),shift F8(跳出:跳出方法),F9(resume,执行到下一个断点)
F8案例
代码语言:javascript复制public class Debug01 {
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i <= 3; i ) {
sum = i;
System.out.println("i=" i);
System.out.println("sum=" sum);
}
System.out.println("结束循环");
}
}
逐行执行代码
遇到输出语句会挨个输出
循环执行完后就会执行后面的语句
直到该程序所有语句全部执行完就会自动跳出
debug过程中报错
代码语言:javascript复制public class Debug02 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
for (int i = 0; i <= arr.length; i ) {
System.out.println(arr[i]);
}
System.out.println("循环结束");
}
}
用debug查看方法源码
代码语言:javascript复制import java.util.Arrays;
public class Debug03 {
public static void main(String[] args) {
int[] arr = {1, -1, 2, -2, 10, 5};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i ) {
System.out.print(arr[i] "t");
}
}
}
两种方法:
(1)在不做任何操作的情况下按F7并没有进入该方法的源码
在设置中将如下两条语句取消勾选即可F7
(2)alt shift F7强制进入
一层一层查看 Arrays.sort()方法
F9
断点可以在debug过程中,动态的下断点
按下F9键,会直接跳转到下一个断点处,并且将第二个断点前的语句全部执行
也可以不断地继续去动态增加断点,进行测试
DebugExercise
使用断点调试,追踪下一个对象创建的过程
代码语言:javascript复制创建对象的流程 (1)加载Person类信息 (2)初始化 默认初始化 -> 显示初始化 -> 构造器初始化 (3)返回对象地址
public class DebugExercise {
public static void main(String[] args) {
Person person = new Person("周小末", 18);
System.out.println(person);//默认调用toString
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{"
"name='" name '''
", age=" age
'}';
}
}
(1)debug查看加载Person类信息
从创建person对象处F8,会直接到Person类中的构造器
一直进行,会在构造器执行完后返回 System.out.println(person);
(2)debug查看System.out.println(person); 中的person有没有调用toString方法
然后继续alt shift F7 String.valueOf(x)
如果obj不为空,则调用obj中的toString方法 ,又因为obj的运行类型是Person
所以就会直接进入到Person类中的toString方法
代码语言:javascript复制