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

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

 2009-10-10 00:00:00 来源:WEB开发网   
核心提示: 可见变量信息抓取 清单 7. 可见变量信息抓取privatevoidprintVisiableVariables(){try{this.thread.suspend();if(this.thread.frameCount()>0){//获取当前方法所在的帧StackFrameframe=t

可见变量信息抓取

清单 7. 可见变量信息抓取

private void printVisiableVariables() 
{ 
  try{ 
    this.thread.suspend(); 
    if(this.thread.frameCount()>0) { 
      //获取当前方法所在的帧 
      StackFrame frame = this.thread.frame(0); 
      List<LocalVariable> lvs = frame.visibleVariables(); 
      for (LocalVariable lv : lvs) { 
        println("Name:" + lv.name() + "\t" + "Type:" 
          + lv.typeName() + "\t" + "Value:" 
          + frame.getValue(lv)); 
      } 
       
    }  
  } catch(Exception e){//ignore} 
  finally{this.thread.resume();} 
} 

通过 this.thread.frame(0) 获取当前方法对应的帧,调用 frame.visibleVariables() 取出当前方法帧的所有可见变量。

异常时线程栈快照

清单 8. 异常事件线程栈快照

private void printStackSnapShot() { 
  try { 
    this.thread.suspend(); 
    //获取线程栈 
    List<StackFrame> frames = this.thread.frames(); 
    //获取线程栈信息 
    for (StackFrame frame : frames) { 
      if (frame.thisObject() != null) { 
        //获取当前对象应该的所有字段信息 
        List<Field> fields = frame.thisObject().referenceType().allFields(); 
        for (Field field : fields) { 
          println(field.name() + "\t" + field.typeName()+ "\t" 
            + frame.thisObject().getValue(field)); 
        } 
      } 
      //获取帧的可见变量信息 
      List<LocalVariable> lvs = frame.visibleVariables(); 
      for (LocalVariable lv : lvs) { 
        println(lv.name() + "\t" + lv.typeName() + "\t" 
          + frame.getValue(lv)); 
      } 
    } 
  } catch (Exception e) {} 
  finally { this.thread.resume();} 
} 

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

Tags:使用 Java Debug

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