持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
功能说明
普通断点配置页面
Any exception断点配置页面
基础配置
- 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还可以添加指定异常类,当触发指定异常类时进入断点。