Btrace使用

btrace是一个java平台上使用的动态追踪工具

btrace工具下载

github的地址为:https://github.com/btraceio/btrace/tree/master
下载地址为:https://github.com/btraceio/btrace/releases
这里记录下我对btrace的使用示例

代码编写

新建maven工程

其中配置文件如下:



    4.0.0

    cn.ye
    btrace
    1.0-SNAPSHOT

    
        
            com.sun.tools.btrace
            btrace-boot
            1.2.3
        

        
            com.sun.tools.btrace
            btrace-agent
            1.2.3
        

        
            com.sun.tools.btrace
            btrace-client
            1.2.3
        
    

代码示例

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

import java.lang.reflect.Field;

@BTrace
public class BtraceApollo {

    //@OnMethod(clazz = "com.ctrip.framework.apollo.biz.config.BizConfig", method = "/.*/", location = @Location(Kind.ENTRY))
    /*public static void config(@ProbeClassName String pcm, @ProbeMethodName String pmn, AnyType[] args){
        BTraceUtils.println("any config...");
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcm+","+pmn);
        BTraceUtils.println();
    }*/

    @OnMethod(clazz = "com.ctrip.framework.apollo.common.config.RefreshableConfig", method = "getValue", location = @Location(Kind.RETURN))
    public static void getValue(@ProbeClassName String pcm, @ProbeMethodName String pmn, AnyType[] args, @Return Object retVal){
        BTraceUtils.println("RefreshableConfig getValue...");
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcm+","+pmn);
        BTraceUtils.println(BTraceUtils.str(retVal));
        BTraceUtils.println();
    }
}

代码中只能使用BTraceUtils的方法,否则使用的时候会报错
上面的代码是对Apollo取配置信息的地方进行拦截处理,打印出参数,类名,方法名,返回值

使用方法

  1. 获取Java进程的pid
jps
image.png

这里取apollo-adminservice.jar的进程id 26907

  1. attach到进程上
    进到下载的btrace目录中,执行以下命令
btrace/bin/btrace 26907 BtraceApollo.java
  1. 执行方法,观测日志


    image.png

    可以看到,打印出参数,类名,方法名,返回值。符合预期

你可能感兴趣的:(Btrace使用)