阅读 493

JAVA8 Stream实用的debug 技巧

调试按钮说明

img

img

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 图标会点亮。

img

点击该图标弹出 Stream Trace 视图。可以看到 filter、sorted、collect 每一个方法执行之后的结果。

img

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 图标。

img

点击该图标弹出 Evaluate 视图,输入需要调试的代码,点击右下角 Evaluate 图标,可以看到执行结果。

img

注: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。

img

然后 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 类型。

img

然后 debug 运行项目,在 Debug 的 Frames 视图可以方便的选择要执行的线程,选择后可继续一步步调试代码。

img

方法回退

实例代码:

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 启动流程源码时,方法调用都很深,想退回来再看看上一步做了啥,用方法回退很方便。

但是对于修改了共享数据的方法,如果回退再执行一次,可能产生异常数据。

img

强制返回

Debug 调试代码时,跟到一个无关痛痒的方法,有时候我们希望提前返回,可以使用下面的方法强制返回一个指定的值。

选择方法右键,选择Fore Return。

img

会弹出一个窗口,输入要返回的值即可。

img

热修改变量的值

有时候,在Debug 的过程中我们想调整一个参数的值又不想重启项目,可以使用Idea提供的实时修改变量值的功能。

首先在 Variables 视图选要修改的变量,右键选择Set Value。

img

输入要修改的内容,回车可进行热修改。

img


作者:JamesZhou
链接:https://juejin.cn/post/7039307515393212429


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐