此示例演示 staticField 数据项和 StaticInitializer 探针段的用法。
在此示例中,探针跟踪创建类的实例的时间。如果一个实例是在创建该类的前一个实例之后经过不止一秒才创建的,探针就会写日志消息。
此探针使用 staticField 来在每个被探测类中创建新的静态字段。比较起来,使用 fragmentAtClassScope 来声明 Date 字段将使 Date 的单个实例出现在保存探针段的生成类中,与将探针应用于多少个类无关。如果想要跟踪创建任何被探测类的实例之间的时间延迟,而不是跟踪创建每个被探测类的实例之间的延迟,则可以这样做。
要使用此示例代码,更改 target 对象中的 package="com.sample*" 以引用实际的包名。
注意,要在 XML 中使用字符 & 和 <,必须指定字符实体 & 和 <,如示例中所示。
<?xml version="1.0" encoding="ASCII"?> <probekit> <probe> <target type="include" package="com.sample*" method="<init>" /> <target type="exclude" package="*" /> <staticField type="java.util.Date"/> <fragment type="entry"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> java.util.Date d = new java.util.Date(); long now = d.getTime(); long prev = lastInstanceDate.getTime(); if (prev != 0 && prev + 1000 < now) { System.out.println("[" + clname + " instance after > 1 second]"); } lastInstanceDate.setTime(now); </code> </fragment> <fragment type="staticInitializer"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> lastInstanceDate.setTime(0); System.out.println("[" + clname + " class loaded]"); </code> </fragment> </probe> </probekit>
上级主题:Probekit 示例