快速业务通道

使用Java Debug Interface(JDI)调试多线程应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

使用Java Debug Interface(JDI)调试多线程应用程序

时间:2010-12-19 IBM 钱毅 蔡小川

多线程环境下的程序调试是让开发者头痛的问题。在 IDE 中通过添加断点的 方式调试程序,往往会因为停在某一条线程的某个断点上而错失了其他线程的执 行,线程之间的调度往往无法预期,并且会因为断点影响了实际的线程执行顺序 。因此,在调试多线程程序时,开发者往往会选择打印 Trace Log 的方式来帮 助调试。

使用 Log 来帮助调试的问题在于,开发者往往无法预期哪些关键点需要记录 ,于是在整个程序的调试过程中,需要不断的加入 Log 调用,编译生成可执行 程序并部署,这对于大尺寸的软件开发项目无疑是噩梦,会直接影响到开发效率 。

有没有一种办法,可以独立于程序代码,能在运行期间绑定到程序上并获取 程序运行过程当中的关键信息呢?更重要的,这种方法应该是可定制的,开发者 可以通过少量的努力,就可以达到特定的调试目的。答案是肯定的。通过使用 java Debug Interface(JDI),开发者可以快速开发定制出适用于自己的线程 Profiling 工具。这样的工具独立于主程序,并且可高度定制。在接下来的文章 中,我们将介绍如何实现该工具。

认识 JPDA 和 JDI

从 J2SE 1.3 开始,Java 开始提供了一套叫做 Java Platform Debugger Architecture(JPDA)的架构,开发者可以通过这套架构来开发调试用程序。这 套架构被主流的 Java IDE(如 Eclipse、NetBeans 等)广泛地采用。

具体来说,JPDA 不仅仅是一套 API 的组合,也不只是一个具体的工具。这 套架构提供了从目标程序、调试双方的信息协议,到供开发者使用的结构调用, 都一一做出了定义。在 J2SE 5.0 中,它由三个部分组成:

Java Virtual Machine Tools Interface(JVMTI),是一套低级别的 native 接口。它定义了 Java 虚拟机所必需为调试提供的服务接口。JVMTI 在 Java 5.0 之前的前身是 JVMDI(Jave Virtual Machine Debug Interface)。

Java Debug Wire Protocol(JDWP),定义了调试双方信息和请求的文本格 式。

Java Debuger Interface(JDI),定义了代码级别的调试接口。

从开发者的角度来看,调试工具的开发既可以基于 JVMTI 也可以基于 JDI。 JVMTI 是 native 接口,使用起来相对复杂,并且需要 C 语言的基础,因此, 在本文中,我们将介绍如何使用 JDI 这种最上层的方式来开发 Java 调试程序 。

需求分析

在接下的部分,我们将介绍如何使用 JDI 来开发一个用来调试多线程程序的 工具。在开始前,让我们先列出这个工具需要满足的功能:

独立于目标应用程序的。

应该足够简单,并且能在通过少量的代码修改就能完成集中配置,这样是帮 助开发者不需要付出太多的努力就能开始调试自己的多线程程序。

能够抓取足够的信息,比如说异常的信息,程序调用过程中的变量值等等。

所生成的 Log 应该足够清晰,能够按不同的线程来分离记录,而不是按照时 间的顺序来生成每一条记录,否则会给调试带来不便。

实现

在文章最后的 示例代码 中,我们展示了一个典型的基于 JDI 的调试工具逻 辑,并且用它来 Profile 一个简单的多线程程序的执行。根据前面所提到的需 求,代码展示了线程运行栈快照、方法调用的入口参数值收集、异常过滤定制、 类过滤配置、线程 Log 记录等功能。具体来说:

独立于目标程序

分析工具可以通过如下方式启动:

java Trace options class args

支持的 options 参数:

-output 文件名:工具生成的 Log 的路径

class 是目标程序的入口类,args 为目标程序的输入参数

使用Java Debug Interface(JDI)调试多线程应用程序(2)

时间:2010-12-19 IBM 钱毅 蔡小川

简洁配置

异常过滤配置:

您可以在 ExceptionConfig.properties 属性文件

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号