下载后解压缩,到D盘 D:\btrace目录下

  • 第二步: path里面配置btrace

           将D:\btrace\bin加到环境变量的path中

           如果没有java_home还要配置JAVA_HOME

  • 第三步: 测试代码示例

    a) 需要trace的java程序代码

package com.ddc.mem;

public class CaseObject{
     
       private static int sleepTotalTime=0; 
     
       public boolean execute(int sleepTime) throws Exception{
           System.out.println("sleep: "+sleepTime);
           sleepTotalTime+=sleepTime;
           Thread.sleep(sleepTime);
           if(sleepTime%2==0)
               return true;
           else 
               return false;
       }
     
    }

    b) 运行上述代码的main入口函数

package com.ddc.mem;

import java.util.Random;

public class CaseObjectMain {

       public static void main(String[] args) throws Exception{
              Random random=new Random();
              CaseObject object=new CaseObject();
              while(true){
                  boolean result=object.execute(random.nextInt(1000));
                 Thread.sleep(1000);
              }
           }
}

    c)btrace java脚本代码

/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace
public class TracingScript {
    /* put your code here */
/*指明要查看的方法,类*/
  @OnMethod(
     clazz="com.ddc.mem.CaseObject",
     method="execute",
     location=@Location(Kind.RETURN)
  )
/*主要两个参数是对象自己的引用 和 返回值,其它参数都是方法调用时传入的参数*/
   public static void traceExecute(@Self com.ddc.mem.CaseObject object,int sleepTime, @Return boolean result){
      println("调用堆栈!!");
       println(strcat("返回结果是:",str(result)));
      jstack();
      println(strcat("时间是:",str(sleepTime)));
   }

}
  • 第四步: 编译运行需要trace的java代码

          javac -d D:\ CaseObject.java

          javac -d D:\ CaseObjectMain.java

          java com.ddc.mem.CaseObjectMain

  • 第五步: 跟踪CaseObject方法的执行情况

          jps  得到java运行的pid

          btrace -cp btrace/build;D:/ pid TracingScript.java

          

          CaseObject的class文件是放在D:\目录下的,所以加了D:\

posted on 2013-03-20 16:15  xuqiyu  阅读(800)  评论(0编辑  收藏  举报