JAVA8 Stream实用的debug 技巧
调试按钮说明
Stream 调试
实例代码:
// 1.Stream 调试 List<Integer> list1 = Lists.newArrayList(1, 5, 3, 2, 4); List<Integer> list2 = list1.stream() .filter(o -> o > 2) .sorted() .collect(Collectors.toList()); System.out.println(list2); 复制代码
在 stram() 处设置断点,debug 运行。
可以看到Debug视图中 Trace Current Steam Chain 图标会点亮。
点击该图标弹出 Stream Trace 视图。可以看到 filter、sorted、collect 每一个方法执行之后的结果。
ok,成功。
Optional 调试
实例代码:
// 2.Optional 调试 User user = new User() .setId(1) .setName("tom") .setArea(new Area().setProvince("beijing")); String province = Optional.ofNullable(user) .map(User::getArea) .map(Area::getProvince) .orElse("未知"); System.out.println(province); 复制代码
在 Optaionl 处加断点,debug 运行,可以看到 Evaluate Express 图标。
点击该图标弹出 Evaluate 视图,输入需要调试的代码,点击右下角 Evaluate 图标,可以看到执行结果。
注:Optaionl 不像 Stream 那样,有专门的调试器,他需要借助 Evaluate Express 视图完成调试。
条件断点
实例代码:
// 3.条件断点, 循环 List<Integer> integerList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for (Integer x : integerList) { System.out.print(x); } 复制代码
有时候在循环中调试时,我们希望只关心我们需要关心的那个对象,但是一次循环记录有很多,每一个都跟一遍很是麻烦,那么条件断点就可以上场了。
在需要的地方加断点,在断点上右键弹出条件断点视图,输入条件表达式,点击 Done。
然后 debug 运行, 只有当 x 的值为 5 的时候才会停住,进入断点。
多线程调试
实例代码:
// 4.多线程调试 new Thread(() -> { System.out.println("线程1执行"); }, "线程1").start(); new Thread(() -> { System.out.println("线程2执行"); }, "线程2").start(); System.out.println("主线程"); 复制代码
线程的执行时间是有系统分配,开发人员无法控制,但是通过Idea 专用的线程调试功能可以很好的选择要执行的线程代码,达到调试代码的目的。
先在线程内设置断点,在断点上右键选择 Thread 类型。
然后 debug 运行项目,在 Debug 的 Frames 视图可以方便的选择要执行的线程,选择后可继续一步步调试代码。
方法回退
实例代码:
public static void method1() { System.out.println("method1"); method2(); } public static void method2() { System.out.println("method2"); method3(); } public static void method3() { System.out.println("method3"); } public static void main(String[] args) { method1(); } 复制代码
通过工具栏里的按钮可回退到上一步。
通过选中方法右键选择 Drop Frame 可回退到指定的方法。
如:阅读Spring IOC 启动流程源码时,方法调用都很深,想退回来再看看上一步做了啥,用方法回退很方便。
但是对于修改了共享数据的方法,如果回退再执行一次,可能产生异常数据。
强制返回
Debug 调试代码时,跟到一个无关痛痒的方法,有时候我们希望提前返回,可以使用下面的方法强制返回一个指定的值。
选择方法右键,选择Fore Return。
会弹出一个窗口,输入要返回的值即可。
热修改变量的值
有时候,在Debug 的过程中我们想调整一个参数的值又不想重启项目,可以使用Idea提供的实时修改变量值的功能。
首先在 Variables 视图选要修改的变量,右键选择Set Value。
输入要修改的内容,回车可进行热修改。
作者:JamesZhou
链接:https://juejin.cn/post/7039307515393212429