视频来源:尚硅谷_宋红康_IDEA2022版本的安装与使用
【【尚硅谷】IDEA2022全新版教程,兼容JDK17(快速上手Java开发利器)】
https://www.bilibili.com/video/BV1CK411d7aA?p=16&vd_source=581d732b20cb23e01428068f153a99ed
IDEA断点调试(Debug)
一 为什么需要Debug
编好的程序在执行过程中如果出现错误,该如何查找或定位错误呢?简单的代码直接就可以看出来,但 如果代码比较复杂,就需要借助程序调试来查找错误了。
运行编写好的程序时,可能出现的几种情况:
> 情况1:没有任何bug,程序执行正确!
======如果出现如下的三种情况,都又必要使用debug=======
> 情况2:运行以后,出现了错误或异常信息。但是通过日志文件或控制台,显示了异常信息的位置。
> 情况3:运行以后,得到了结果,但是结果不是我们想要的。
> 情况4:运行以后,得到了结果,结果大概率是我们想要的。但是多次运行的话,可能会出现不是我们想要的情况。 比如:多线程情况下,处理线程安全问题。
二 Debug的步骤
Debug(调试)程序步骤如下:
1、添加断点
2、启动调试
3、单步执行
4、观察变量和执行流程,找到并解决问
1、添加断点
在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点,在相同 位置再次单击即可取消断点。
Debug01
package com.atguigu.debug;
/**
* ClassName: Debug01
* Package: com.atguigu.debug
* Description: 演示1:行断点 & 测试debug各个常见操作按钮
*/
public class Debug01 {
public static void main(String[] args) {
//1.
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;
}
}
没有打断点之前 正常运行后 结果如下
这时候我们发现一个问题 执行结果没有替换过来 并不是我们想要的结果
这时我们打上断点
执行断点
这时我们的代码就会停留到第一个打断点的位置,也就是说我们用debug运行之后 代码会直接运行到我们第一个打断点的位置
这时我们当前的变量有形参args 值为空 m=10
这时我们会发现n=10并没有展示出来 那是因为我们在 int n=10 上面打了断点 是走到这个断点的位置 但是实际上这行代码并没有执行 也就是 int n=10 没有执行 换句话说 打断点的位置 实际上是没有执行的
接下来 我们学习一下F8
F8 : 进入下一步,如果当前行断点是调用一个方法,则不进入当前方法体内
比如 我们现在点击F8
在下一步
我们可以通过Console来看到他的输出语句
在下一步
在下一步
在下一步 程序结束
现在我们学习
F7: 进入下一步,如果当前行断点是调用一个自定义方法,则进入该方法体内
我们接着上面重新打上断点
F8 下一步
F8 下一步
到这里面 我们来研究一下swap(m, n);方法内部的运行情况
接下来 我们点击F7
这时我们可以看到我们已经进入到方面里面了
从栈也可以看到 原来我们在main线程里面 现在到swap方法里面
现在在这个方法 就是把前面 m=10 n=20 传进来了给了swap方法里面的二个变量swap(int m,int n)
接下来在 F8 temp = m;
int temp = m; 把m=10的值给了temp temp=10
下一步 F8 m = n;
下一步 F8 执行n = temp;
这个时候 我们发现 m和n 好像已经完成交换了 实际我们在认真查看 会发现 这个时候的m 和 n 是 swap(int m,int n) 方法里面的m 和 n
然后 我们观察一下 main方法里面的m和n 并没有发生变化
由上面的分析我们已经已经知道方法swap(int m,int n) 里面的执行情况 接下来 我们可以直接跳出这个方法 执行Shift+F8 跳出当前方法体
接下来 我们学习Shift+F8 跳出当前方法体
现在栈里面就只有一个main方法 main方法 里面的m和n还是10和20 m = 10 n = 20
拉下来 我们点击 结束程序
接下来
我们重新运行 打bug
如果我们想要从一个断点跳转到下一个断点的位置 就可以点击F9
F9: 恢复程序运行,但如果该断点下面代码还有断点则停在下一个断点上
在点击一下 F9 如果下面还有断点就达到下一个断点位置 如果下面没有断点 刚就退出程序
目前我们的案例 没有下一个断点 所以程序直接结束
接下来
我们重新在运行Debug
接下来 我们点击F8 下一步
如果这个时候我们想要查看println()方法里面的源码 这个时候我们点击F7 已经不好使了,如果我们点击一下 F7 会变成下面这个样子
所以我们 现在 重新运行debug
下一步F8
现在我要想进入println() 我们按Alt+Shift+F7(正常是这样 但是我里没法进入) 变成这样
正确的
如果这里面执行正确的话 就直接 Shift+F8 跳出 然后就走到下面这一步
接下来 我们学习
Run to Cursor(Alt + F9):直接跳到光标处继续调试
我们光标在2 就直接跳转到2进行调试