使用Java Debug Interface(JDI)调试多线程应用程序 - 编程入门网
e:"
+ frame.getValue(lv));
}
}
} catch(Exception e){//ignore}
finally{this.thread.resume();}
}
通过 this.thread.frame(0) 获取当前方法对应的帧,调用 frame.visibleVariables() 取出当前方法帧的所有可见变量。 异常时线程栈快照 清单 8. 异常事件线程栈快照
通过 this.thread.frames() 获取异常发生时线程栈中所有帧信息,调用 frame.thisObject() 获取对 this 指针的引用,进而获取对象字段信息;对于 帧信息的抓取与清单 7 类似。 使用Java Debug Interface(JDI)调试多线程应用程序(6)时间:2010-12-19 IBM 钱毅 蔡小川分类信息生成 Log 以单线程为记录单元是分析器的特点,下面将从分析器 Log 实现结构、目标 程序所模拟的场景及分析结果三方面对示例代码进行介绍。 分析器 Log 实现结构 Trace 为分析器入口类,它负责创建绑定连接,生成目标程序虚拟机实例; EventThread 负责从虚拟机实例的事件队列中获取事件,交由对应的 ThreadTrace 处理,它同时维护着一张 ThreadReference 和 ThreadTrace 一一 对应关系的映射表;ThreadTrace 负责分析 ThreadReference 信息,并将结果 记录在 logRecord 的缓存中,每个 ThreadTrace 实现了单个线程信息的追踪, 详见图 1。 图 1. 分析器类图 : 目标程序 目标程序由两个核心类组成:MainThread 和 CounterThread。MainThread 是程序的主类,它负责启动两个 CounterThread 线程实例并抛出两类异常:用 户自定义异常 UserDefinedException 和运行时异常 NullPointerException; CounterThread 是一个简单的计数线程。整个目标程序模拟的是多线程和异常的 环境。 分析结果 Log 依照目标程序的调用层次进行缩进,清晰地展现每个线程的执行逻辑和 变量信息,详见清单 9。为了方便理解,我们在 log 中加入了注释。 清单 9. Log
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |