黑马程序员技术交流社区

标题: 【济南校区】Java之debug总结四之常用小技巧篇一 [打印本页]

作者: 大山哥哥    时间: 2018-7-31 11:29
标题: 【济南校区】Java之debug总结四之常用小技巧篇一
本帖最后由 大山哥哥 于 2018-7-31 11:29 编辑

      之前关于debug的方式写了3篇帖子,简述了6种工作中常用的debug方式,今天补充一些小技巧(针对Eclipse|MyEclipse|STS,idea还没有搞明白)。   
一、条件debug(应用场景:满足某种条件才会触发断点,一般是条件判断时)
     比如只有当id是12306时记录会有问题,那就当id等于12306时才触发断点,其他都放过。具体操作如下图:
     
     选择"Breakpoint Properties..."后,弹出如下弹出框:
      

    根据自己的条件按照上图设置即可。   
参考代码:
[Java] 纯文本查看 复制代码

public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            if(i==80){//断点行,设置断点属性
                System.out.println("nihaowoshi: "+i);
            }else{
                System.out.println("sorry"+i);
            }
        }
    }

二、异常断点(应用场景:知道抛出的异常是什么,但是不知道位置在哪,帮助查找异常抛出位置)    比如已知程序抛出“java.lang.ArithmeticException”异常。
    打开“debug”视图,设置异常断点,操作具体,如下图:
     

     参考代码如下:
   
[Java] 纯文本查看 复制代码

public static void main(String[] args) {
                System.out.println("no problem");
                try {
                        int j = i/0;//异常行
                } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println(e.getMessage());
                }
                System.out.println("have problem");
        }

三、单步过滤(应用场景:当使用debug时,F5走到下一行代码,有时候会走到jar包中类的方法中,“单步过滤就是跳过这些我们想忽略的方法直接到目标方法内部的一种debug技巧
      具体使用场景参考下图:      
      具体操作:
      1.设置单步过滤条件,过滤的包或类
       Window-->Preferences-->Java-->Debug-->Step Filtering 具体设置如下图:
      
      2.debug时,设置“单步过滤”生效
      

     参考代码:
     
[AppleScript] 纯文本查看 复制代码

public static void main(String[] args) {
                String str = "abcdefghijklmnopqrstuvwxyz";
                String upcase = toUpcase(str.substring(0, 3));
                System.out.println(upcase);
        }
        public static String toUpcase(String param){
                String upperCase = param.toUpperCase();
                return upperCase;
        }
四、跳到帧(应用场景:当想debug的代码行不小心跳过去的时候)
       作用:在debug时,eclipse可以直接跳到调用栈中指定的任意帧(main方法中的帧除外),并且使JVM在此处重新运行。这使你可以重新运行你的部分代码,而不需要为了调试之前的代码而重新来一次
      上述有个调用栈”,“”的概念什么是调用栈呢?如下图:
      
     操作:如果想回退,选择其中的“帧”,右键“drop to frame”即可。注意:main方法中的“帧”无效     参考代码:
     
[Java] 纯文本查看 复制代码

public static void main(String[] args) {
                String str = "abcdefghijklmnopqrstuvwxyz";
                String upcase = toUpcase(str.substring(0, 3));
                System.out.println(upcase);
        }
        public static String toUpcase(String param){
                System.out.println("hello");
                System.out.println("hi");
                String upperCase = param.toLowerCase();
                return upperCase;
        }


eclipse debug的小技巧有很多,今天先总结这4条,剩下的一些小技巧下一篇在给大家详细描述,希望这些小技巧在以后的工作中能对大家有所帮助。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2