前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >idea打断点调试_vs断点调试快捷键

idea打断点调试_vs断点调试快捷键

作者头像
全栈程序员站长
发布于 2022-11-01 08:36:08
发布于 2022-11-01 08:36:08
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

IDEA断点调试–基础篇

1 前言

Debug 用来追踪代码的运行流程。我们通常会在程序运行过程中出现异常的时候,启用 Debug 模式来分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用 Debug 模式来跟踪代码的运行流程去学习三方框架的源码。而 IDEA 作为我们 JAVA 开发最常用的工具,所以我们对于 IDEA 的 Debug 更应该去了解一下。

2 断点类型

IDEA 中对于 JAVA 的断点进行了分类,有如下的 4 类:

  1. Java Line Breakpoints :行断点
  2. Java Method Breakpoints :方法断点
  3. Java Field Watchpoints :字段监控(字段断点)
  4. Java Exception Breakpoints : 异常断点

2.1 行断点

行断点也是我们最经常使用的一种断点,只需要在我们要查看的代码左侧使用鼠标左键点击,便是创建了一个行断点。

鼠标左键创建的断点是默认的配置,而当我们需要自定义一个配置断点的时候,可以通过 Shift + 鼠标左键 进行点击,则会出现详情配置页面

如果我们需要进入 Debug 界面,则需要勾选 Suspend

效果演示

运行到断点处,则将线程挂起,进入 Debug 界面,如图所示:

2.2 方法断点

方法断点这里分为两种

  • 一种就是直接在方法打上断点

这样子打上断点后,当进入该方法或离开该方法的时候,都会将线程挂起,进入 Debug 界面

  • 另外一种则是直接在接口上面打上断点

这种情况下,则是相当于给该接口方法的实现打上方法断点,也是当进入该方法或离开该方法的时候,都会将线程挂起,进入 Debug 界面

效果演示

实现类代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** * @author zzn * @date 2021/4/4 8:49 */
public interface IService { 
   

    /** * 接口断点 */
    void execute();

}

public class ServiceImpl implements IService { 
   
    
    @Override
    public void execute() { 
   
        System.out.println("执行方法...");
        System.out.println("执行方法...");
        System.out.println("执行方法...");
    }

}

2.3 字段断点

字段断点就是在类中的属性变量或者字段打上断点

当该属性的值发生变化时,就会把线程挂起,进入 Debug 界面

效果演示

可以看到,程序在执行构造方法和 set 方法给 age 属性进行赋值的时候,就进入 Debug 界面,而在 toString 中,虽然有使用到 age 属性,但是并不涉及到属性的变更,因此并不会挂起程序。

实体类代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** * @author zzn * @date 2021/4/4 8:54 */
public class Student { 

private String name;
private Integer age;
public Student(String name, Integer age) { 

this.name = name;
this.age = age;
}
public String getName() { 

return this.name;
}
public Integer getAge() { 

return this.age;
}
public void setName(String name) { 

this.name = name;
}
public void setAge(Integer age) { 

this.age = age;
}
@Override
public String toString() { 

return "Student(name=" + this.name + ", age=" + this.age + ")";
}
}

调试代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /** * 字段断点 */
public void field() { 

Student student = new Student("field", 10);
student.setAge(12);
System.out.println(student);
}

2.4 异常断点

异常断点的创建方式不同于其他的断点(但是其他类型的断点也可以用这种方式进行创建)

然后在弹出的界面搜索 NullPointerException,然后点击 OK,这样子就成功创建一个异常断点了

效果演示

可以看到,我们在方法中并没有打上断点,但是当程序要抛出 NullPointerException,则自动将线程挂起,进入 Debug 界面。

3 基本用法

idea 中的基本操作有如下这些:

  1. Show Execution Point :显示执行点,快捷键:Alt + F10
  2. Step Over : 步过,快捷键:F8
  3. Step Into : 步入,快捷键:F7
  4. Force Step Into : 强制步入,快捷键:Alt + Shift + F7
  5. Step Out : 步出,快捷键:Shift + F8
  6. Drop Frame :丢帧,快捷键:无
  7. Run to Cursor : 运行到光标处,快捷键:Alt + F9

3.1 显示执行点

当我们查看其他的方法的时候,忘记断点执行的位置时,通过 Show Execution Point 可以快速定位到断点所在的位置。

3.2 步过

执行该方法的下一步

  • 如果该行代码是方法,也不会进入到方法的内部
  • 如果是最后一行代码或者是 return 语句,则跳转到上一层方法的下一行代码

3.3 步入

  • 如果当前行是方法调用,则进入到该方法的内部
  • 如果当前行不是方法调用,则跳转到下一行代码

可以看到, System.out.println(); 也是一个方法,但是却并没有进去方法里面,而是直接跳转到下一行。这是因为对于一些系统类,idea 默认是排除掉,会直接跳转到下一行,不会进去方法里面,具体排除的类可以自己在设置里面进行配置。

3.4 强制步入

强制步入对于普通的方法,效果是跟步入的效果是一样的,也是进入到方法的内部,但是对于一些已经配置排查的方法,例如刚刚的 System.out.println(); ,就可以使用强制步入,进去到该方法里面。

3.5 步出

跳转到上一层方法的下一行代码

3.6 丢帧(重点)

因为每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的 Java 方法调用。

因此丢帧,就是丢弃掉当前断点所在方法的栈帧,回退到上一层的方法

丢帧就是回退到上一层的方法,相当于重新调用一次该方法,但是之前的某些参数/数据的状态已经改变了的是无法回退到之前的状态的,如对象、集合、更新了数据库数据等等。

可以看到,虽然我们回退到了上一步,但是 List 集合里面的对象却已经发生了改变

3.7 运行到光标处

运行到光标的所在位置

  • 如果光标之前还有断点,则运行到该断点
  • 如果该光标不在运行的路径上,则程序运行到下一个断点或者直接结束

4 总结

之前没学习的时候,就只知道使用行断点进行调试,遇到异常报错的话,还需要定位到报错的地方,打上行断点,重新调试运行

而通过对断点类型和基本用法进行学习,可以将有可能出现的异常打上断点,这样子,当遇上异常的时候,就自动进入 Debug 界面,可以节省很多时间,方便我们更加随心所欲地调试程序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179673.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档