欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 【java基础】IDEA 的断点调试(Debug)

【java基础】IDEA 的断点调试(Debug)

2024/10/25 4:17:07 来源:https://blog.csdn.net/2302_78914800/article/details/141270091  浏览:    关键词:【java基础】IDEA 的断点调试(Debug)

目录

1.为什么需要 Debug

2.Debug的步骤

2.1添加断点

2.2单步调试工具介绍

 2.2.1 Step Over

 2.2.2 Step Into

2.2.3 Force Step Into

2.2.4 Step Out

2.2.5 Run To Cursor

2.2.6 Show Execution Poiint

2.2.7 Resume Program

3.多种 Debug 情况介绍

3.1行断点

3.2方法断点

3.2.1样例一

3.2.2样例二


1.为什么需要 Debug

编好的程序在执行过程中如果出现错误,该如何查找并定位错误呢?简单的代码可以直接看出来,但如果代码比较复杂,就需要借助程序调试来查找错误了。

2.Debug的步骤

Debug(调试)程序步骤如下

  1. 添加断点
  2. 启动调试
  3. 单步执行
  4. 观察变量和执行流程,找到并解决问题

2.1添加断点

源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同位置再次单击即可取消断点。

2.2单步调试工具介绍

 2.2.1 Step Over

每点一次就执行一步(F8)

 2.2.2 Step Into

进入到方法内部(F7)

2.2.3 Force Step Into

进入源码(Alt + Shift + F8)

2.2.4 Step Out

跳出当前方法(Shift + F8)

2.2.5 Run To Cursor

运行至光标所在行(Alt + F9)

2.2.6 Show Execution Poiint

显示断点所在位置(Alt + F10)

2.2.7 Resume Program

运行至下一断点 (F9)

在 Debug 过程当中,可以动态的下断点

3.多种 Debug 情况介绍

3.1行断点

示例代码:

/*** 行断点*/
public class Debug01 {public static void main(String[] args) {int m = 10;int n = 20;System.out.println("交换前:m = " + m + ", n = " + n);swap(m, n);System.out.println("交换后:m = " + m + ", n = " + n);}public static void swap(int m, int n) {int temp = m;m = n;n = temp;}
}

运行结果如下:

运行结果

 我们发现 m 和 n 的值实际上并没有交换,为了探究其原因,我们可以使用行断点进行调试

点击 Debug 后,程序会运行到第一个断点的位置上

此后,每次点击 Step Over 都会向下执行一步

调试到此处,我们选择 Step Into 进入到方法内部,若中途想要跳出当前方法,可以点击 Step Out;若仍点击 Step Over,则会将 swap 方法一次性执行完毕并执行到 main 方法的下一条语句

最后我们可以看到在 swap 方法中 m=20, n=10

但是在 main 方法中仍然 m=10, n=20

如果运行到第一个断点以后,想要直接运行到下一个断点,我们可以点击 Resume Program

3.2方法断点

  • 断点设置在方法的签名上,默认当进入时,断点可以被唤醒
  • 也可以设置在方法退出时,断点也被唤醒

示例代码:

/*** 方法断点*/
public class Debug02 {public static void main(String[] args) {//1.Son instance = new Son();instance.test();//2.类的多态性Father instance1 = new Son();//3.接口的多态性Consumer con = new ConsumerImpl();con.accept("example");//4.HashMap map = new HashMap();map.put("Tom", 12);map.put("Jerry", 11);map.put("Tony", 20);}
}class Father{public void test() {System.out.println("Father : test1");System.out.println("Father : test2");}
}class Son extends Father{@Overridepublic void test() {System.out.println("Son : test1");System.out.println("Son : test2");}
}interface Consumer{void accept(String str);
}class ConsumerImpl implements Consumer{@Overridepublic void accept(String str) {System.out.println("ConsumerImpl: " + str);}
}

3.2.1样例一

点击 Debug 以后会停留在断点方法的第一行代码的位置

右键断点我们可以勾选此处,此后方法退出时断点也被唤醒

3.2.2样例二

我们在父类打下断点,子类不打断点

运行时,子类明明没有断点,但是也停留了,这叫做方法的重写,子类重写父类的方法,即覆盖

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com