首页 > 编程知识 正文

idea断点调试快捷键,idea debug启动很慢

时间:2023-05-05 09:12:21 阅读:17017 作者:2838

调试IDEA断点-在基础篇1的简介中,调试程序用于跟踪代码的执行过程。 通常,程序执行中发生异常时,将Debug模式设为有效,分析定位异常发生的位置和执行中的参数变化。 通常,您还可以启用调试模式来跟踪代码的执行过程,并学习三方框架的源代码。 IDEA是我们JAVA开发中最常用的工具,所以我们应该了解更多关于IDEA的调试。

2在断点类型IDEA中,JAVA断点分为四类:

Java Line Breakpoints :行断点Java方法断点Java Field Watchpoints :字段监视(字段断点) Java exceptiion

使用鼠标左键创建的断点是默认设置,但如果需要自定义断点,请使用Shift鼠标按钮单击以显示高级设置页面

如果需要进入调试界面,则必须选中Suspend

效果演示一直运行到断点,线程锁定并进入调试接口,如下图所示。

2.2方法断点方法断点在这里分为两类

一是直接在方法中加入断点

这样插入断点后,如果进入方法或离开方法,线程将挂起并进入调试接口

另一种是在接口上直接放置断点

在这种情况下,相当于在该接口方法的安装上附加方法断点,无论是进入该方法还是离开该方法时,都使线程挂起并进入调试接口

效果演示

实现类代码

/* * @ author zzn * @ date 2021/4/48:49 */publicinterfaceiservice {/* * *接口断点*/void execute (); } publicclassserviceimplimplementsiservice { @ overridepublicvoidexecute (} { system.out.println ) '执行方法. '; System.out.println ('如何执行.'); System.out.println ('如何执行.'); }} 2.3字段断点是在类中的属性变量或字段上设置断点

如果此属性的值发生更改,线程将挂起并进入调试接口

效果演示

在执行构造和set方法为age属性赋值时,程序将进入调试接口,但在toString中使用了age属性,但不参与属性更改,因此不会挂起程序

实体类代码:

/* * @ author zzn * @ date 2021/4/48:54 * /公共类别稳定{私有名称; 私有集成器Age; 公共统计(string name,Integer age ) { this.name=name; this.age=age; } public String getName () { return this.name; }公共integer get age () { return this.age; }公共语音集名称(字符串名称) { this.name=name; }公共语音设置(integer age ) { this.age=age; } @Override public String toString () return'student ) name='this.name ',age=' this.age ' ); }调试代码

/** *场断点*/public void field () student student=new student (' field ',10 ); sudent.setage(12; system.out.println(student ); } 2.4异常断点是以与其他断点不同的方式创建的。 但是,也可以使用这种方法创建其他类型的断点。)

然后在弹出屏幕中搜索NullPointerException,并单击“确定”。 现在,异常断点已成功创建

效果演示

/p>

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

3 基本用法

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

Show Execution Point :显示执行点,快捷键:Alt + F10Step Over : 步过,快捷键:F8Step Into : 步入,快捷键:F7Force Step Into : 强制步入,快捷键:Alt + Shift + F7Step Out : 步出,快捷键:Shift + F8Drop Frame :丢帧,快捷键:无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 界面,可以节省很多时间,方便我们更加随心所欲地调试程序

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。