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

调试技巧

    可以用下面的方法打印或记录任意变量的值
    System.out.print("x="+x)
    或者
    Logger.getGlobal().info("x="+x)
    为每个类添加 main 方法,后期要删除
    单元测试

    日志代理是一个子类对象,他可以截获方法调用,并进行日志记录,然后调用超类中的方法,例如:
    如果在调用Random类的nextDouble方法时出现了问题,就可以按照下面的方式,以匿名子类实例的形式创建一个代理对象。

    Random generator=new Random(){

    public double nextDouble(){
        double result=super.nextDouble();
        Logger.getGlobal().info("nextDouble:"+result);
        return result;
    }
    };


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

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

    try{
     ...
    }catch(Throwable t){
    t.printStackTrace;
    throw t;
    }

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

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

    StringWriter out = new StringWriter();
    new Throwable().printStackTrace(new PrintWriter(out));
    String description = out.toString();


    要想观察类的加载过程,可以用 -verbose 标志启动Java 虚拟机,这种方法有助于诊断由于类路径引发的问题。

    -Xlint 选项告诉编译器对一些普通容易出啊先的代码问题进行检查。例如,如果使用下面这条命令编译:
    javac -Xlint:fallthrough
    当switch语句中缺少break语句时,编译器就会给出报告。

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

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

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




作者:码农飞哥
微信公众号:码农飞哥