BTrace源码的查探点一般是类级别的,指定类名后,这个设置将对此类的所有对象都生效。
但有时我们只想监控这个类里的某个对象,比如某个业务类中的某个HashSet类型的成员变量。
BTrace对此没有直接的支持,但有的情况下你可以考虑一种变通的方法:
1. 先写一个BTrace源码找到你要访问的特定对象的hashCode.
int hashCode = BTraceUtils.identityHashCode(set)
2. 然后另写BTrace源码,按hashCode过滤对象:
@OnMethod(clazz="java.util.HashSet", method="/.*/") public static void allListMethodsEntry(@Self java.util.HashSet set) throws Exception { if(identityHashCode(set) == hashCode ) { ... } }
不得不承认,这种办法的适用场景非常有限:
你的目标应该是一个长寿对象(比如系统中的单例),这个对象的hashCode一直不变。