BTrace如何只查探特定对象的方法

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一直不变。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.