天天看點

BTrace入門BTrace入門

BTrace入門

概念性的東西自行網上查閱吧。

安裝

現在btrace項目已經遷移到了github上了。這點可以從官網(

https://kenai.com/projects/btrace/downloads/directory/releases/latest

)上看出。

點開這個連結就會跳轉到btrace項目的github位址:

https://github.com/btraceio/btrace

下面直接給出下載下傳位址:

https://github.com/btraceio/btrace/releases

我這裡下載下傳的版本是

https://github.com/btraceio/btrace/releases/download/v1.3.8.1/btrace-bin-1.3.8.1.tgz

下面的安裝步驟主要就是設定環境變量,其實也可以不設定。這裡設定下隻是為友善執行指令而已。另外各種作業系統設定環境變量的方法也有所不同,我這裡是采用的 mac 系統,采用的終端軟體我也改變了一下,是以需要各自根據自己的實際情況進行設定。

下載下傳完成後,執行:

mkdir btrace
tar -zxvf btrace-bin-1.3.8.1.tgz -C btrace           

假設btrace路徑為 : /Applications/btrace

下面隻需要設定 BTRACE_HOME 和 PATH 兩個環境變量即可。

注意我這裡修改的檔案是~/.zshrc檔案。這個要看各自使用的作業系統以及所使用的terminal用戶端而定。具體是哪個檔案請各自查閱相關資料。

vim ~/.zshrc            

拉到檔案末尾,添加以下代碼:(建議不要去修改已有的配置,隻需要在末尾追加即可)

export BTRACE_HOME="/Applications/btrace"
export PATH=$BTRACE_HOME/bin:$PATH           

儲存檔案,執行:

source ~/.zshrc           

基本用法

btrace pid btrace腳本           

編寫測試類

package com.btrace;

import java.util.Random;
import java.util.UUID;

public class RemoteClass {

    public String f1(String a, int b) {
        System.out.println(a + " " + b);
        return a;
    }

    public static void main(String[] args) {
        RemoteClass rc = new RemoteClass();
        while (true) {
            rc.f1(UUID.randomUUID().toString(), new Random().nextInt());
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {

            }
        }
    }
}

然後啟動main方法,并找到pid
jps -ml

我這裡的pid 為:13705           

編寫btrace腳本

  • 我這裡的腳本儲存路徑為:/Users/xxx/Desktop/btrace_script
cd /Users/xxx/Desktop/btrace_script           

Btrace初體驗

  • 功能: 每次執行完f1後,列印 “Hello BTrace”
    import com.sun.btrace.annotations.*;
    import static com.sun.btrace.BTraceUtils.*;
    import java.lang.reflect.Field;
    
    @BTrace public class HelloBtrace {
    
      @OnMethod(
        clazz="com.btrace.RemoteClass",
        method="f1"
      ) 
      public static void onF1() {
        println("Hello BTrace");
      }
    }           
    儲存為:HelloBtrace.java
  • 執行腳本:
    btrace 13705 HelloBtrace.java           

擷取方法參數

  • 功能:得到參數
  • 注意:參數的定義,順序,個數保持一緻。(個數我這邊測試是必須保持相同的,至于類型,順序是否必須保持一緻就沒有測試了)
    import com.sun.btrace.annotations.*;
    import static com.sun.btrace.BTraceUtils.*;
    import java.lang.reflect.Field;
    
    @BTrace public class HelloBtrace {
    
      @OnMethod(
        clazz="com.btrace.RemoteClass",
        method="f1"
      ) 
      public static void onF1(String a,int b) {
        println(str(a));
        println(str(b));
        println("");
      }
    }
               
  • btrace 13705 HelloBtrace.java           

擷取方法傳回值

  • 功能:擷取方法的傳回值
    import com.sun.btrace.annotations.*;
    import static com.sun.btrace.BTraceUtils.*;
    import java.lang.reflect.Field;
    
    @BTrace public class HelloBtrace {
    
      @OnMethod(
        clazz="com.btrace.RemoteClass",
        method="f1",
        location=@Location(Kind.RETURN)
      ) 
      public static void onF1(String a,int b,@Return String result) {
        println(str(a));
        println(str(b));
        println(str(result));
        println("");
      }
    }
               
  • btrace 13705 HelloBtrace.java           

更多功能

總結

對Btrace的用法主要就是學習用提供的各種注解,以及com.sun.btrace.BTraceUtils類提供的各種功能。

如果想要了解各個注解的文檔,可以參考:

https://btrace.kenai.com/javadoc/1.2/com/sun/btrace/annotations/package-summary.html