Btrace使用笔记

一、简介

BTrace可以动态地向目标应用程序的字节码注入追踪代码

使用技术:JavaComplierApi、JVMTI、Agent、Instrumentation+ASM

二、下载和使用

下载页面:https://github.com/btraceio/btrace/releases/tag/v1.3.11.3

下载后进行环境变量的配置,配置具体可参考其他博客

把文件夹build里面的jar包添加到项目中就可以写brace脚本了

脚本格式

@BTrace
public class PrintArgSimple {

	@OnMethod(
	        clazz="",
	        method="",
	        location=@Location(Kind.ENTRY)
	)
	public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) {
		BTraceUtils.printArray(args);
		BTraceUtils.println(pcn+","+pmn);
	    }
}

1、类名加上注解@BTrace声明这是一个btrace脚本

2、方法名上加上@OnMethod配置拦截厄类(clazz)、方法(method)、拦截时机(location)

3、方法入参@ProbeClassName声明参数为class名称、 @ProbeMethodName为方法名称、args为拦截方法的参数

三、拦截方法

普通方法

@OnMethod(clazz="",method="")

构造函数

@OnMethod(clazz="",method="<init>")

拦截同名用参数区分

四、拦截时机

Kind.ENTRY:入口(默认)

Kind.RETURN:返回

Kind.THROW:异常

Kind.LINE:行

五、拦截this、入参、返回

this:@Self

入参:可以用AnyType、也可以用真实类型、同名的用真实的

返回:@Return

六、获取对象的值

简单类型:直接获取

BTraceUtils.printFields(user);

复杂类型:反射,类名+属性名

Field filed2 = BTraceUtils.field("", "");

七、注意事项

  • 默认只能在本地运行,如果需要远程运行则需要修改源代码
  • 生产环境下可以使用,但是被修改的字节码不会被还原

 

github:https://github.com/liaobei/btraceScripts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值