Idea中Breakpoints配置页详解

550 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情

功能说明

普通断点配置页面 image.png Any exception断点配置页面 image.png

基础配置

  • Enabled:是否启用断点
  • Suspend:ALL进入断点时暂停所有线程,Thread只暂停当前线程,多线程调试时使用
  • Condition:断点条件,可用所有上下文变量当结果为true时进入断点

日志配置

  • "Breakpoint hit" message:在控制台中打印当前断点位置
  • Stack trace:打印异常堆栈信息
  • Evaluate and log:打印表达式结果,支持代码段,没有return则取最后一行内容

过滤器

  • Catch class filters:异常断点页使用,指定捕获断点的范围,支持通配符例如com.meijm.*表示com.meijm包下的代码出现异常会进入断点。
  • Instance filters:实例id过滤,只有在非静态的上下文中才会生效(未验证)
  • Class filters:仅在指定java类中生效
  • Caller filters:在指定调用类调用后生效

Notifications:断点异常中使用

  • Caught exception:已捕获异常
  • Uncaught exception:未捕获异常

其它配置

  • Remove once hit:进入断点后移除断点
  • Pass count:在指定次数后进入断点,该设置会导致Instance,Class filters条件失效。
  • Disable until hitting the following breakpoint:在程序到达指定断点之前禁用当前断点
    • Disable again:再次禁用
    • Leave enabled:保持启用

测试异常断点

public static void main(String[] args) {
    List<Integer> arr = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
        arr.add(i);
    }
    try {
        throw new RuntimeException("test exception");
    }catch (Exception e){
        e.printStackTrace();
    }
    for (Integer integer : arr) {
        arr.remove(integer);
    }
    System.out.println("over");
}

上述代码中包含一个已捕获异常,一个未捕获异常,通过Notifications配置可进入不同断点,当勾选已捕获异常时。运行main方法时会进入URLClassLoader中的ClassNotFoundException断点,这显然不是我们关注的异常,可以使用Catch class filters进行过滤,指定当前类对应的包即可过滤一些干扰异常。

Java Exception Breakpoints中除了Any exception还可以添加指定异常类,当触发指定异常类时进入断点。

参考资料

www.jetbrains.com/help/idea/u…