Java基础之异常机制学习&分析--(二)

举报
码农飞哥 发表于 2021/05/29 12:12:46 2021/05/29
【摘要】 调试技巧 可以用下面的方法打印或记录任意变量的值 System.out.print("x="+x) 或者 Logger.getGlobal().info("x="+x)为每个类添加 main 方法,后期要删除单元测试日志代理是一个子类对象,他可以截获方法调用,并进行日志记录,然后调用超类中的方法,例如: 如果在调用Random类的nextDouble方法时出现...

调试技巧

  1. 可以用下面的方法打印或记录任意变量的值
    System.out.print("x="+x)
    或者
    Logger.getGlobal().info("x="+x)
  2. 为每个类添加 main 方法,后期要删除
  3. 单元测试
  4. 日志代理是一个子类对象,他可以截获方法调用,并进行日志记录,然后调用超类中的方法,例如:
    如果在调用Random类的nextDouble方法时出现了问题,就可以按照下面的方式,以匿名子类实例的形式创建一个代理对象。

    Random generator=new Random(){
    
    public double nextDouble(){ double result=super.nextDouble(); Logger.getGlobal().info("nextDouble:"+result); return result;
    }
    };
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    当调用 nextDouble 方法时,就会产生一个日志消息。要想知道谁调用了这个方法,就要生成一个堆栈轨迹。

  5. 利用 Throwable 类提供的 printStackTrace方法,可以从任何一个异常对象中获得堆栈情况。下面的代码将捕获任何异常,打印异常
    对象和堆栈轨迹,然后重新抛出异常,以便能够找到相应的处理器。

    try{
     ...
    }catch(Throwable t){
    t.printStackTrace;
    throw t;
    }
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    不一定要通过捕获异常类生成堆栈轨迹,只要在代码的任何位置插入下面这条语句就可以获得堆栈轨迹;
    Thread.dumpStack()

  6. 一般来说,堆栈轨迹显示在 System.err 上。也可以利用 printStackTrace(PrintWriter s) 方法将它发送到一个文件。
    另外,如果要记录或显示堆栈轨迹,就可以采用下面的方式,将它捕获到一个字符串:

    StringWriter out = new StringWriter();
    new Throwable().printStackTrace(new PrintWriter(out));
    String description = out.toString();
    
        
       
    • 1
    • 2
    • 3
    • 4
  7. 要想观察类的加载过程,可以用 -verbose 标志启动Java 虚拟机,这种方法有助于诊断由于类路径引发的问题。
  8. -Xlint 选项告诉编译器对一些普通容易出啊先的代码问题进行检查。例如,如果使用下面这条命令编译:
    javac -Xlint:fallthrough
    当switch语句中缺少break语句时,编译器就会给出报告。

  9. Java虚拟机增加了对Java应用程序进行监控和管理的支持。它允许利用虚拟机中的代理装置跟踪内存消耗,线程使用,类加载等情况。这个功能对于
    像应用程序服务器这样大型的、长时间运行的Java程序来说特别重要。

    找出运行虚拟机的炒作系统进程的ID。在UNIX/Linux环境中,运行ps实例工具,在Windows环境中,使用任务管理器,然后运行jconsole 程序:
    jconsole processID

  10. 可以使用 jmap 实用工具获得一个堆的转储,其中显示了堆的转储,其中显示了堆中的每个对象。使用命令如下:
    jmap -dump:format=b,file=dumpFileName processID
    然后,通过浏览器进入 localhost:7000,将会运行一个网络应用程序,借此可以探查转储对象时堆的内容。

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/79135317

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。