idea debug笔记

前言

参照 程序员囧辉 的debug B站视频和笔记 ,受益良多

正文
Debug的常见使用场景
基础操作

Step over:程序往下执行一行

Step into:进入方法内,可以进入自定义方法或三方库方法,JDK方法无法进入

force step into:强制进入方法内,一般step into进不去时可以使用

step out:退出方法,跟(force)step into 配合使用

Resume Program:恢复运行程序,运行到下一个断点的地方

5个操作从上往下分别对应下图的1-5,这也是 Debug 最常用的几个基础操作。

img
行断点(Line Breakpoints)
方法断点(Method Breakpoint)

方法断点:方法入口(entry)和出口(exit)都会自动暂停
常用场景:打在接口方法会自动跳到实现类,无需通过上下文环境去分析是哪个实现类
缺点:可能会大大降低debug速度

img
字段断点(Field Watchpoints)

字段断点:在字段发生变更(默认)或者被访问(需要额外设置)时暂停

常用场景:想知道某个属性在什么时候被赋值,从头开始调试太麻烦

而如果我们想在字段被访问时也暂停,则可以右键字段断点,将【Field access】勾选上即可。

img
异常断点(Exception Breakpoints)

异常断点:在发生相应异常的地方暂停

常用场景:程序抛出了异常,想快速定位是哪个地方抛出了异常

缺点:异常可能会太多

img
主动抛异常(Throw Exception)

主动抛出异常

常用场景:测试异常场景

imgimg

降帧(Drop Frame)

降帧:返回到调用方法前

常用场景:方法执行完想再重新执行一遍

功能:当我们 Debug 从 A 方法进入 B 方法时,通过降帧(退帧)可以返回到调用 B 方法前,这样我们就可以再一次调用 B 方法。

通常用于当我们快执行完 B 方法后,发现某个重要流程被我们跳过了,想再看一下,则此时可以先回退到 A 方法,然后再次进入 B 方法。

我们知道方法的执行和结束在 JVM 中对应的是栈帧的入栈和出栈,因此栈帧描述的就是方法对应的模型,而降帧(退帧)则对应的就是回退到上一个方法。

img
断点条件(Condition)
img

功能:当程序执行到断点位置时,需要 Condition 中的表达式返回 true,才会暂停,否则会直接跳过。

用于断点所在的地方执行次数过多时,避免浪费时间在不想关注的流程上。例如我们有一个 Spring bean 的初始化存在问题,我们想跳过其他 bean 的初始化流程,则可以在初始化的入口设置 beanName.equals(“”) 表达式,来达到只在我们关注的 bean 执行时才暂停。

img
强制返回(Force Return)
img

功能:强制结束当前程序运行流程,直接返回。

当我们调试时,发现继续往下执行就要将错误的数据写入数据库时,我们可以通过 Force Return 来强行结束当前流程。

img

而如果我们是通过 Stop 按钮来结束,此时结束的是 Debug 流程,而程序流程还是会往下执行,从而将错误数据写入数据库

img
Stream 调试(Trace Current Stream Chain)
img

功能:当我们暂停在 Stream 的处理代码行时,可以将 Stream 的整个处理流程以图形化界面的形式展示。

img

合理的使用 Stream 会让我们的代码更加简洁,但是现在存在大量滥用 Stream 的情况,Stream 本身就比较抽象,大量滥用会使得 Stream 的代码难以理解和调试。

当我们发现问题出在 Stream 的处理流程中时,我们可以通过该功能来看到每个步骤处理前和处理后的数据,方便我们定位排查是哪一步出了问题。

执行表达式(Evaluate Expression)
img img

当我们在测试时,发现某段代码逻辑很难有符合条件的数据时,可以通过该功能直接修改数据,来加快我们的测试。

该功能非常强大,我们可以在这边执行任何逻辑,举个例子:可以将数据保存到数据库、可以发送一个RPC请求等等。

多线程调试(Suspend)

图标:如下图

img

Suspend 有两种模式:All 和 Thread。

Thread:暂停进入断点的线程,不影响其他线程执行。所有进入断电的线程依次Debug。

All:暂停全部线程。只能 Debug 第一个暂停线程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值