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”
儲存為:HelloBtrace.javaimport 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"); } }
- 執行腳本:
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
更多功能
- 參考1: https://kenai.com/projects/btrace/pages/UserGuide
- 參考2:btrace的安裝目錄下有個 samples 檔案夾,裡面有各種示例
總結
對Btrace的用法主要就是學習用提供的各種注解,以及com.sun.btrace.BTraceUtils類提供的各種功能。
如果想要了解各個注解的文檔,可以參考:
https://btrace.kenai.com/javadoc/1.2/com/sun/btrace/annotations/package-summary.html