zoukankan      html  css  js  c++  java
  • 这几个IDEA高级调试技巧,用完就是香

     摘自:https://www.cnblogs.com/erlie/p/12392288.html

    这几个IDEA高级调试技巧,用完就是香

     

    在这里插入图片描述

    一个项目启动两次

    测试分布式项目时,经常要一个项目启动2次,不用将一个项目打开多次启动,配置一下即可

    1.点击Edit Configurations
    在这里插入图片描述
    2.勾选Allow parallel run
    在这里插入图片描述
    3.依次点击如下2个按钮
    在这里插入图片描述

    条件断点

    有如下代码,只想让它在i == 10的情况下停下来

    @Test
    public void condition() {
        for (int i = 0; i < 30; i++) {
            System.out.println(i);
        }
    }

    1.鼠标左键在行数上加上断点
    2.在断点上右键加上条件
    3.点击Done按钮
    在这里插入图片描述
    此时断点上会有问号,表示这是一个条件断点,右键点击即可查看条件
    在这里插入图片描述

    多线程调试

    当有多个线程时,我们如何控制线程的执行顺序呢?

    @Test
    public void thread() {
    
        new Thread(() -> {
            System.out.println("我是线程1-1");
            System.out.println("我是线程1-2");
            System.out.println("我是线程1-3");
        }, "线程1").start();
    
        new Thread(() -> {
            System.out.println("我是线程2-1");
            System.out.println("我是线程2-2");
            System.out.println("我是线程2-3");
        }, "线程2").start();
    
        System.out.println("主线程");
    
    }

    例如让线程1和2依次执行如下代码

    System.out.println("我是线程1-1");
    System.out.println("我是线程2-1");
    System.out.println("我是线程1-2");
    System.out.println("我是线程2-2");

    普通模式debug模式下是做不到的,因为我们没办法控制线程的执行顺序。需要做如下设置

    1.右键点击断点,选中Thread(Make Default表示把当前选中的Thread设置为默认值)
    在这里插入图片描述
    设置后的断点如下,3个断点都是Thread模式
    在这里插入图片描述
    执行到某个语句想切换线程的时候选中下一步要执行的线程即可
    在这里插入图片描述

    临时执行表达式/修改变量值

    代码如下

    public class User {
    
        private String username;
        private Integer age;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    
    @Test
    public void changeValue() {
        User user = new User();
        user.setUsername("aa");
        System.out.println(user.getUsername() + " " + user.getAge());
    }

    在输出语句上加上断点
    在这里插入图片描述
    在断点处执行了

    user.setAge(10);

    最后的输出结果为

    aa 10

    我们也可以直接右键选中Set Value修改username属性等
    在这里插入图片描述

    回退

    在这里插入图片描述
    当断点执行到method2()时,想回退到method1时,点击如下按钮即可
    在这里插入图片描述
    需要注意的是,断点回退只能重新走一下流程,某些改变了的数据是无法回退到之前的状态,如对象、集合等等

    欢迎关注

    关注回复 pdf目录 有惊喜,海量视频资源访问 www.erlie.cc
    在这里插入图片描述

    参考博客

    [1]https://www.cnblogs.com/jun1019/p/9741224.html
    [2]https://www.cnblogs.com/chiangchou/p/idea-debug.html

     
    好文要顶 关注我 收藏该文  
    0
    0
     
     
     
    « 上一篇: 图示JVM工作原理
    posted @ 2020-03-01 21:40  Java识堂  阅读(76)  评论(0)  编辑  收藏
  • 相关阅读:
    python class 的属性
    程序员7年和我的7点感想――我的程序人生
    LCD 调试总结 [转]
    shell sed 替换某行内容
    msm 模拟i2c使用过程分析
    高通平台USB host协议分析 之 一
    Linux文件查找命令find,xargs详述
    (翻译)Android属性系统
    内存对齐.结构体对齐
    python class 用法
  • 原文地址:https://www.cnblogs.com/xichji/p/12393736.html
Copyright © 2011-2022 走看看