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 

  

 

posted on 2022-01-19 17:03  rabbit-xf  阅读(113)  评论(0)    收藏  举报