• 解析java中的debug模式之异常断点调试


    解析java中的debug模式之异常断点调试

    1 原理

    停顿发生异常的代码行,图标为小闪电,默认不显示,只有停顿在异常所在代码行(该代码并未执行)才显示

    2 使用步骤

    2.1 打开断点面板

    2.1.1 需要点击下方的 View breakPoint按钮

    在这里插入图片描述

    2.1.2 点击完View breakPointer后的效果图

    在这里插入图片描述

    2.2 在+号菜单栏下面选择java Exception breakPoints

    2.2.1 点击+号

    在这里插入图片描述

    2.2.2 选择javaException breakPoints()

    在这里插入图片描述

    2.3 单击后会弹出一个输入框,要你输入你想要异常断点具体是哪个异常

    在这里插入图片描述

    2.4 输入nullP根据提示选择空指针异常,然后点击ok,此时空指针异常断点就成功打上了

    2.4.1 根据提示选择空指针异常

    在这里插入图片描述

    2.4.1 双击nullpoint后会回到断点菜单,此时发现java Exception BreakPointer下方出现了NullPointerException,此时代表空指针断点成功打上了

    在这里插入图片描述

    2.5 打完异常断点后,代码行不会有闪电标志

    在这里插入图片描述

    2.6 开启debug模式之前

    在这里插入图片描述

    2.7 开启debug模式之后

    在这里插入图片描述

    2.8 此时你知道了这个地方null有问题,但是你想跳过这个空指针的地方去执行其他的程序代码,该怎么办呢?

    2.8.1 找到你需要关闭的方法的线程

    在这里插入图片描述

    2.8.2 右键单击选择Force Return

    在这里插入图片描述

    2.8.3 使用强行退出后的效果

    在这里插入图片描述

    在这里插入图片描述

    3 使用场景

    有些时候我们可能因为考虑的不够周全,有可能出现null值的传递,这个时候我们需要把经常出现的运行时异常断点给打上,这样debug调试模式运行的时候,会停顿在一旦执行就会出现异常的那一行,此时该行并未执行,然后我们就可以去处理不够周全的位置的业务逻辑了

    4 示例代码

    Dog类

    package Work;
    public class Dog {
        private String name;
        //名字
        private String type;
        //类型
        private int age;
        //年龄
    
        public Dog() {
        }
    
        public Dog(String name, String type, int age){
            this.name = name;
            this.type = type;
            setAge(age);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age){
            if(age<0||age>10){
                System.out.println("年龄非法");
            }
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", type='" + type + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    Person类

    package Work;
    public class Person {
        private String name;
        //有一个Dog类型的属性
        private Dog dog;
    
        public Person(String name, Dog dog) {
            this.name = name;
            this.dog = dog;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Dog getDog() {
            return dog;
        }
    
        public void setDog(Dog dog) {
            this.dog = dog;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", dog=" + dog +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    Test05类

    package Work;
    public class Test05 {
        public static void main(String[] args) {
           //检测传入的引用数据类型里面的具体参数变化
          Person p=new Person("张三",null);
          fn(p);
          System.out.println("是否顺序执行");
        }
        public static void fn(Person p){
            p.getDog().setAge(10);
            System.out.println("加油把!!!勇敢的少年们!!!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5 示例代码debug模式截图

    在这里插入图片描述

  • 相关阅读:
    JavaScript-1-菜鸟教程
    Rust专属开发工具——RustRover发布
    艾美捷 DetergentOUT GB-S10去垢剂的特点和多种应用
    [4G/5G/6G专题基础-156]: 什么是物理层信道评估
    UID、EUID、GID和EGID
    xmind2testcase:高效的测试用例导出工具
    微信小程序和APP:关于跳转及调用支持方式整理
    JSON 注释
    Git提交规范
    ios 访问 WebViewJavascriptBridge 是 undefined
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/126078556