WEB开发网
开发学院软件开发Java 使用 Java Debug Interface(JDI)调试多线程应用... 阅读

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

 2009-10-10 00:00:00 来源:WEB开发网   
核心提示: 执行栈信息记录,当异常发生时,使用 Java Debug Interface(JDI)调试多线程应用程序(8),执行栈中完好地保存了调用帧信息,分析器获取线程栈中的所有帧,MethodExitRequest 和 ThreadDeathRequest 事件的方式记录执行过程,事件注册详细见清单 4

执行栈信息记录。当异常发生时,执行栈中完好地保存了调用帧信息。分析器获取线程栈中的所有帧,并记录每个帧记录的信息,其中包含可见变量值、帧调用名称等信息。StackFrame 中变量信息的获取也是 JDI 所提供的特殊能力之一。

与 IDE 设置断点的方法相比,提供的数据信息量相当,但分析器提供执行流程信息更加的清晰;与在程序中记录 Log 的方式相比,分析器在执行流程和信息量两方面都胜出。

以下将详细介绍上面三方面信息抓取:

线程执行流程

线程执行流程可划分:线程启动→ run() →进入方法→ ... →退出方法→线程结束。通过向虚拟机实例注册 ThreadStartRequest,MethodEntryRequest,MethodExitRequest 和 ThreadDeathRequest 事件的方式记录执行过程。事件注册详细见清单 4,清单 6 列出分析器对于以上事件的处理方法。

清单 6. 获取执行流程

void threadStartEvent(ThreadStartEvent event) { 
  println("Thread " + event.thread().name() + " Start"); 
} 
void methodEntryEvent(MethodEntryEvent event) { 
  println("Enter Method:" + event.method().name() + " -- " 
    + event.method().declaringType().name()); 
  // 进入方法记录可见变量值 
  this.printVisiableVariables(); 
} 
void methodExitEvent(MethodExitEvent event) { 
  println("Exit Method:" + event.method().name() + " -- " 
    + event.method().declaringType().name()); 
  // 退出方法记录可见变量值 
  this.printVisiableVariables(); 
} 
void threadDeathEvent(ThreadDeathEvent event) { 
  println("Thread " + event.thread().name() + " Dead"); 
} 

上一页  3 4 5 6 7 8 9 10  下一页

Tags:使用 Java Debug

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接