操纵Java Debug Interface(JDI)调试多线程操纵程序[Java编程]
本文“操纵Java Debug Interface(JDI)调试多线程操纵程序[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
多线程环境下的程序调试是让开辟者头痛的问题.在 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)调试多线程操纵程序[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |