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取配置信息的地方进行拦截处理,打印出参数,类名,方法名,返回值
使用方法
- 获取Java进程的pid
jps
image.png
这里取apollo-adminservice.jar的进程id 26907
- attach到进程上
进到下载的btrace目录中,执行以下命令
btrace/bin/btrace 26907 BtraceApollo.java
-
执行方法,观测日志
image.png
可以看到,打印出参数,类名,方法名,返回值。符合预期
网友评论