断点类型详解

目录

一、行断点

二、方法断点-(尽量不用)

三、字段断点

四、异常断点


一、行断点

        - All:阻塞该程序内所有线程(默认)
        - Thread:只阻塞当前断点所在线程(在多线程调试、远程调试中强烈建议使用这种方式)

          Java Line Breakpoints 显示了所有的断点,在右边勾选Condition,设置断点的条件。                     ondition:这就是所谓的条件断点,只有书写的表达式返回true时候断点才会被激活

   Log
              - 勾选”Breakpoint hit message”:断点激活时输出提示日志
              - 勾选”Stack trace”:断点激活时输出程序调用栈信息
              - 勾选”Evaluate and log”:并在下面的输入框中输入”args”,断点激活时会计算并输出变量 args 的值
              - 他哥三是可以同时被勾选的(因为都是复选框~)

二、方法断点-(尽量不用)

尽量不用,会导致debugger不管用,若想用也等到断点进来了,再打方法断点

 

方法断点你可能之前没有用过,但如果你有阅读源码的习惯,那么你需要好好利用一下这个家伙了。

方法断点

添加方法断点和添加行断点的步骤一样,两者只是外观上有些不同,方法断点用红色的菱形表示。

那么方法断点有什么用呢?举个例子

类图

 有如上类关系,代码实现如下:

public class ServiceImplA implements Service{
    @Override
    public String method() {
        return "hello A";
    }
}
public class ServiceImplB implements Service{
    @Override
    public String method() {
        return "hello B";
    }
}

有如下调用:

public String hello() {
    // 假设通过看代码很难确定是哪个实现类的实例
    Service service = createService();
    return service.method();
}

 这个时候,我们不能一眼看出 service 是 ServiceImplA 的实例,还是 ServiceImplB 的实例(这个例子代码比较简单,像 Spring 这类开源框架要复杂很多,看过源码的话都有体会)。

接下来就是方法断点表演的时刻了,在接口 Service 的 method() 上打一个断点:
 

 运行程序,查看效果:

方法断点效果

可以看到,hello() 方法中的 service.method() 真正调用的是 ServiceImplA 的 metho() 方法。

另外,方法断点还支持以下配置:

 方法断点配置项

 方法断点配置项

其中,Method entry 和 Method exit 二者至少要选择一个(如果进入方法和退出方法都不选,那方法断点也就没啥用了)。

三、字段断点

字段断点也是一个看源码的神器。当一个成员变量被多方引用时,它可以精准的找到谁读取、修改了它的值。

字段断点

字段断点用一个红色的眼睛表示,可谓是非常形象了。就像给成员变量专门安排了一个盯梢的人,有什么风吹草动第一时间通知你。

运行程序,看下效果:

字段断点效果

可以看到,精准的定位到 hello 被赋值的位置。

字段断点还支持以下配置:

字段断点配置项

同样,Field access 和 Field modification 最少选一个。

四、异常断点

异常断点在我们修复 bug 的时候很有用。可以精准的定位到发生(指定类型)异常的代码行。

 异常断点

异常断点用一个红色的闪电表示(断点响应以后才会显示)。

使用快捷键 Ctrl + Shift + F8 打开断点管理对话框,按如下步骤进行添加:设置异常类型

运行程序,查看效果:异常断点效果 

可以看到,当发生(指定类型)异常后,程序停在了发生异常的代码行,并在前面放一个红色的闪电,提醒你就是这行代码要搞事情。

断点还支持以下配置:异常断点配置项

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值