btrace使用
Btrace使用
介绍
BTrace 是一个动态安全的Java 追踪工具,它通过向运行中的Java 程序植入字节码文件,来对运行中的Java 程序热更新,方便的获取程序运行时的数据信息,并且,保证自己的消耗特别小,大部分情况下不会影响Java 程序的性能。
在本例子,利用BTrace打印正在运行的java程序中方法的传入参数、方法返回值、类的成员变量。
安装Btrace
下载v2.2.1
https://github.com/btraceio/btrace
export BTRACE_HOME=/root/java_tools/btrace export PATH=$BTRACE_HOME/bin:$PATH
btrace --version

java代码调用例子
public class Taa {
public static void main(String[] args) throws Exception {
Random random = new Random();
CaseObject caseObject = new CaseObject();
boolean result = true;
while (result) {
String baicai = "mengka AAA..["+TimeUtil.toDate(new Date(),TimeUtil.format_1)+"]";
result = caseObject.execute(random.nextInt(1000),baicai);
//result = caseObject.execute(1000);
System.out.println(baicai);
Thread.sleep(1000);
}
}
}
public class CaseObject {
private static int mengka = 0;
public boolean execute(int sleepTime,String baicai) throws Exception {
System.out.println("sleep: " + sleepTime);
mengka += sleepTime;
Thread.sleep(sleepTime);
return true;
}
}

Btrace脚本代码
package mengka.btrace_04;
import static org.openjdk.btrace.core.BTraceUtils.*;
import org.openjdk.btrace.core.annotations.*;
@BTrace
public class TraceMethodArgsAndReturn {
//@Self mengka.btrace_04.CaseObject instance,
@OnMethod(clazz = "mengka.btrace_04.CaseObject", method = "execute", location = @Location(Kind.RETURN))
public static void traceExecute(@Self Object caseObject, int sleepTime, String baicai, @Return boolean result) {
println("--------- , test btrace");
/**
* 打印方法的传入参数
*
*/
print(strcat("sleepTime is:", str(sleepTime)));
println(strcat(" , baicai = ", str(baicai)));
/**
* 打印CaseObject类的某个成员变量
*
*/
println(strcat("mengka is:", str(get(field("mengka.btrace_04.CaseObject", "mengka"), caseObject))));
/**
* 打印方法的返回值
*
*/
println(strcat("return value is:", str(result)));
}
}
- 打印方法的传入参数
- 打印CaseObject类的某个成员变量
- 打印方法的返回值
btrace 1009472 TraceMethodArgsAndReturn.java

浙公网安备 33010602011771号