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; } };
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
当调用
nextDouble
方法时,就会产生一个日志消息。要想知道谁调用了这个方法,就要生成一个堆栈轨迹。利用
Throwable
类提供的printStackTrace
方法,可以从任何一个异常对象中获得堆栈情况。下面的代码将捕获任何异常,打印异常
对象和堆栈轨迹,然后重新抛出异常,以便能够找到相应的处理器。try{ ... }catch(Throwable t){ t.printStackTrace; throw t; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
不一定要通过捕获异常类生成堆栈轨迹,只要在代码的任何位置插入下面这条语句就可以获得堆栈轨迹;
Thread.dumpStack()
一般来说,堆栈轨迹显示在
System.err
上。也可以利用printStackTrace(PrintWriter s)
方法将它发送到一个文件。
另外,如果要记录或显示堆栈轨迹,就可以采用下面的方式,将它捕获到一个字符串:StringWriter out = new StringWriter(); new Throwable().printStackTrace(new PrintWriter(out)); String description = out.toString();
- 1
- 2
- 3
- 4
- 要想观察类的加载过程,可以用
-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
,将会运行一个网络应用程序,借此可以探查转储对象时堆的内容。
文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。
原文链接:feige.blog.csdn.net/article/details/79135317
- 点赞
- 收藏
- 关注作者
评论(0)