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

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

 2009-10-10 00:00:00 来源:WEB开发网   
核心提示: 分析器从事件队列中获取事件EventQueue 用来管理目标虚拟机实例的事件,事件会被加入 EventQueue 中,使用 Java Debug Interface(JDI)调试多线程应用程序(7),分析器调用 EventQueue.remove(),如果事件队列中存在事件,方法的输入值决定了方

分析器从事件队列中获取事件

EventQueue 用来管理目标虚拟机实例的事件,事件会被加入 EventQueue 中。分析器调用 EventQueue.remove(),如果事件队列中存在事件,则返回不可修改的 EventSet 实例,否则分析器会被挂起直到有新的事件发生。处理完 EventSet 中的事件后,调用其 resume() 方法唤醒 EventSet 中所有事件发生时可能挂起的线程。

清单 5. 获取事件

public void run() { 
  EventQueue queue = vm.eventQueue(); 
  while (connected) { 
    try { 
      EventSet eventSet = queue.remove(); 
      EventIterator it = eventSet.eventIterator(); 
      while (it.hasNext()) { 
        handleEvent(it.nextEvent()); 
      } 
      eventSet.resume(); 
    } catch (InterruptedException exc) {// Ignore 
    } catch (VMDisconnectedException discExc) { 
      handleDisconnectedException(); 
      break; 
    } 
  } 
} 

获取多线程执行信息

执行流程和变量信息是调试程序最重要的两方面。无论是通过 IDE 设置断点的调试方式,还是通过在程序中记 Log 的调试方式,它们的主要目的是向开发者提供以上两方面信息。本文分析器以单个线程为单位,来记录线程运行信息:

执行流程。分析器以方法作为最小颗粒度单位。分析器按照实际的线程执行顺序记录方法进出。

变量值。对于单个方法而言,其程序逻辑固定,方法的输入值决定了方法内部执行流程。分析器将在方法入口和出口分别记录该方法作用域内可见变量,便于开发者调试。

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

Tags:使用 Java Debug

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