跟踪Java执行过程的方法

发布时间:2016-12-14 00:00:00 编辑:嘉辉 手机版

  Zviki Cohen基于自己探索和理解他人所编写代码的体验,发布了跟踪Java执行过程的5种方法。他发现简单的阅读源代码(有些情况下是反编译代码),可能是十分乏味和有错误倾向的过程。

  作为替代,他推荐了5种不同运行时跟踪方法以在Java代码运行时观察它,消除了学习他人代码的许多不利条件。下面一起来看看吧!

  1、基本方法:断点和单步执行

  “以最简单的方法开始:设置断点并开始跟踪你的程序执行。它在这些时候是最好的:你需要一个快速且简单的解决方案,你拥有所有代码并且知道想在哪里停止执行。你需要在给定断点设置精细的信息(参数、局部变量等等)。”

  2、初级方法:调试消息

  “我们通过设置调试消息来继续对程序跟踪。最简单的方法是使用System.out.println语句把消息打印到控制台。 它在这些时候是最好的:你拥有代码且很清楚你正在寻找什么。对事件处理器来说这是非常好的解决方案。当贯穿某一复杂流程的执行过程时,它的高性能对理解触发了哪个事件是非常实用的。”

  3、热门方法:动态代理(Dynamic Proxy)

  “这是在简单调试消息之上所做的改进。动态代理是一个特定的Java特性,它允许开发者引入proxy类,加进某一给定类之前,并通过某一给定接口截获所有调用。它在这些时候是最好的:它对事件处理器来说是非常好的解决方案。你可以在很短时间内用一个普通代理设置一个虚拟事件处理器,来查看事件发生顺序。当需要理解事件处理器时这是最简单和快捷的方法。”

  4、暴力方法:运行时剖析器(Run-time Profiler)

  “剖析器是通过特定的JVM hooks在系统中跟踪所有调用的强大工具。但是用它来跟踪执行过程是大才小用。它在这些时候是最好的:你想拥有一个特定操作的完整画卷(如,非常短的执行流程)。”

  5、新时代:Aspects

  “面向方面编程(Aspect Oriented Programming——AOP)是一个非凡的想法。无需深入Aspect概念,这里只考虑其能力:它是截获你的代码执行既快速又容易的方法。你可以围绕方法、构造器、属性访问等等有选择地设置hook,而不需要修改原始代码。在这些hook中,你可以打印调试消息。它在这些时候是最好的:你想跟踪可重新构建的代码执行。”

  延伸阅读:创建Excel格式的数据

  到目前为止,通过一个Servlet或者jsp生成一个逗号分割值(CSV)文件,然后作为MIME类型text/csv返回给浏览器,这还是在Java应用中创建MicrosoftExcel文件的最常用的方法。浏览器会调用Excel,并显示CSV格式的文件。

  现在有了一个为Java开发人员提供能够真正创建Excel文件的方案。这就是一个称作POI(“可怜的混乱实现”)的新的Jakarta项目组中最成熟的部分。POI中Excel组件命名为HSSF(“可怕的电子表格格式”)。

  虽然HSSF提供了许多不同的和引擎交互的方式,我们这儿集中于简单的高层用户API的讨论。

  下面是在一个Excel表格中创建一个矩阵的简单例子:

  importorg.apache.poi.hssf.usermodel.*;importjava.io.FileOutputStream;//code run against thejakarta-poi-1.5.0-FINAL-20020506.jar.publicclass PoiTest staticpublic void main(String args) throws ExceptionFileOutputStream fos= new FileOutputStream("foo.xls");HSSFWorkbookwb = newHSSFWorkbook();HSSFSheet s =wb.createSheet();wb.setSheetName(0,"Matrix");for(short i=0; i〈50;i++) HSSFRow row =s.createRow(i);for(short j=0; j〈50; j++) HSSFCellcell=row.createCell(j);cell.setCellValue(""+i+","+j);wb.write(fos);fos.close();

  这段代码首先创建一个Workbook,从该Workbook中得到一个表格、命名,然后继续写入一个50x50的矩阵。最后输出到一个名为foo.xls的Excel文件,甚至在Mac机上也可以打开。

  POI项目是Java应用的令人兴奋的一步,为用户提供了Windows文档集成的新功能,答应Java开发人员方便地扩展其产品的功能。

本文已影响974
+1
0