当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

操纵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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 操纵javascript得到浏览器中的星号密码
  • 操纵Java运算符
  • 传送和操纵Java对象
  • 操纵Java技术将Atom转换为RDF
  • 操纵java成立躲藏文件
  • <b>操纵Java实现网络传输数据压缩的实例</b>
  • 操纵Java来实现域名和IP地址转换的操作
  • <b>操纵Java实现一个简单的递归算法的实例</b>
  • <b>操纵Java编写网络通信程序</b>
  • 操纵Java Applet播放声音文件
  • 操纵Java语言举行Unicode代理编程
  • 操纵Java3D实现三维图象
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .