快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
中配置所需记录异常类型 。在 Demo 代码中配置了对于 NullPointerException 和 UserDefinedException 两种异常,分析工具将追踪这两种异常情况。

ExceptionName = exceptions.UserDefinedException;java.lang.NullPointerException

类过滤配置:

您可以在 ClassExcludeConfig.properties 属性文件中配置被过滤的类模式 ,分析工具将不会处理被过滤类的任何事件。

ExcludedClassPattern=java.*;javax.*;sun.*;com.sun.*;com.ibm.*

运行

在目标的主程序的生命周期中,分析器完成以下操作:

绑定,分析工具和目标调试程序的虚拟机实例绑定;

事件注册,分析工具向虚拟机实例注册相关事件请求,整个分析过程采取基 于事件驱动的模式。

线程运行时信息挖掘。

分类信息生成。

以上四点操作满足了需求:通过采用绑定机制实现调试程序和工具程序的独 立,分析工具和目标程序以监听端口、共享内存等方式进行通信,无须目标程序 进行任何代码修改即可实现调试。采用基于事件的机制可以帮助开发者依据实际 需要集中注册和处理事件。作为基础框架,分析工具注册了支持异常、执行流程 等事件,并提供了异常时运行栈快照,方法进出参数记录等功能实现信息抓取。 支持单线程为单位的 Log 记录,将开发者从无序不可预测的多线程执行中摆脱 出来,对调试程序提供帮助。

下面将详细阐述实现步骤:

绑定

JDI 支持四种对目标程序的绑定方式,分别为:

分析器启动目标程序虚拟机实例

分析器绑定到已运行的目标程序虚拟机实例

目标程序虚拟机实例绑定到已运行的分析器

目标程序虚拟机实例启动分析器

JDI 支持一个分析器绑定多个目标程序,但一个目标程序只能绑定一个分析 器。为支持以上绑定,JDI 对应有 LaunchingConnector,AttachingConnector 和 ListeningConnector,具体类介绍可以参照 文档。

本文采用第一种绑定方式阐述如何开发定制的多线程分析器,其它绑定方式 可以参照 文档。

绑定过程分为三个步骤:

获取连接实例

清单 1. 获取连接实例

LaunchingConnector findLaunchingConnector() {    List connectors = Bootstrap.virtualMachineManager ().allConnectors();    Iterator iter = connectors.iterator();    while (iter.hasNext()) {     Connector connector = (Connector) iter.next();     if ("com.sun.jdi.CommandLineLaunch".equals(connector.name ())) {        return (LaunchingConnector) connector;      }    } }

Bootstrap.virtualMachineManager().allConnectors() 返回所有已知的 Connector 对象实例。选择返回 com.sun.jdi.CommandLineLaunch 连接实例, 表示使用第一种绑定方式。

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

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

设置连接参数

清单 2. 设置连接参数

/**参数:  * connector为清单1.中获取的Connector连接实例 * mainArgs为目标程序main函数所在的类 **/ Map connectorArguments(LaunchingConnector connector, String  mainArgs) {    Map arguments = connector.defaultArguments();    Connector.Argument mainArg = (Connector.Argument)  arguments.get("main");    if (mainArg == null) {      throw new Error("Bad launching connector");    }    mainArg.setValue(mainArgs);    return arguments; }

每个连接实例都有对应的默认参数,启动连接之前需要设置必须的参数,对 于 CommandLineLaunch 连接实例需要设置主程序启动目标程序虚拟机实例所需 的参数。

启动连接,获取目标程序虚拟机实例

清单 3. 启动

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号