美文网首页
Btrace使用

Btrace使用

作者: SparkOnly | 来源:发表于2021-01-16 21:00 被阅读0次

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

    btrace工具下载

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

    代码编写

    新建maven工程

    其中配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>cn.ye</groupId>
        <artifactId>btrace</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>com.sun.tools.btrace</groupId>
                <artifactId>btrace-boot</artifactId>
                <version>1.2.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.sun.tools.btrace</groupId>
                <artifactId>btrace-agent</artifactId>
                <version>1.2.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.sun.tools.btrace</groupId>
                <artifactId>btrace-client</artifactId>
                <version>1.2.3</version>
            </dependency>
        </dependencies>
    </project>
    

    代码示例

    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使用

          本文链接:https://www.haomeiwen.com/subject/ldgnaktx.html