BTrace使用方法之一

使用btrace可以在不改進代碼,不影響當前線上運行的基礎上進行運行時環境的跟蹤,可以免去打日誌,發部等繁瑣的工作

使用Btrace可以從官網上下載相應二進制文件

下載地址爲:http://kenai.com/projects/btrace/downloads

下載後解壓,需要配置環境變量

將目錄 btrace/bin 配置到自己的PATH環境變量中, 同進也可以將btrace/build配置到classpath當中去

LINUX下編輯/etc/profile文件,可將上述配置弄好,然後執行source /etc/profile可使用變量生效

配置完成後在終端執行 btrace 命令,若出現如下結果表明安裝正確

Usage: btrace <options> <pid> <btrace source or .class file> <btrace arguments>
where possible options include:
  -classpath <path> Specify where to find user class files and annotation processors
  -cp <path>        Specify where to find user class files and annotation processors
  -I <path>         Specify where to find include files
  -p <port>         Specify port to which the btrace agent listens for clients



嘗試第一個BTrace應用

編寫測試類 Case1 and CaseObject

import java.util.Random;
public class Case1{

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

}
class CaseObject{

   private static int sleepTotalTime=0;

   public boolean execute(int sleepTime) throws Exception{
       System.out.println("sleep: "+sleepTime);
       sleepTotalTime+=sleepTime;
       Thread.sleep(sleepTime);
       return true;
   }

}
第二步,編寫BTrace角本 TraceMethodArgsAndReturn.java

import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;

@BTrace
public class TraceMethodArgsAndReturn{

 @OnMethod(
      clazz="CaseObject",
      method="execute",
      location=@Location(Kind.RETURN)
   )
   public static void traceExecute(@Self CaseObject instance,int sleepTime,@Return boolean result){
     println("call CaseObject.execute");
     println(strcat("sleepTime is:",str(sleepTime)));
     println(strcat("sleepTotalTime is:",str(get(field("CaseObject","sleepTotalTime"),instance))));
     println(strcat("return value is:",str(result)));
   }
}
注意,在這裏我們兩個文件都放在同一個目錄,同時需要將第一個java文件編譯成class文件,即字節碼

將Case1程序運行起來,他將是一個無限循環的程序,這樣可以保證一直在運行,方便我們去捕獲運行時的一些信息

下一步我們將用jps命令去查看case1進程的pid是多少, 假如我們獲得的Case1的pid是4444

最後一步我們將執行btrace角本去獲得相關信息, 執行命令如下

 btrace <options> <pid> <btrace source or .class file> <btrace arguments>

在我們這個實例中就是:

btrace 4444 TraceMethodArgsAndReturn.java

 執行完後你就可以看到效果了啦.........................


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章