在JDI中,有一个API将事件从JPDA使用的JVM中的处理事件中排除出来。这是使用以下方法完成的:
addExclusionFilter(String)排除某些模式;例如addExclusionFilter("java.*")addClassFilter(String)包括某种模式;例如addClassFilter("java.util.*")现在我两者都需要。我需要排除来自"java.*"的所有事件,但我需要接收来自"java.util.Iterator"的事件。
另外,请注意,例如,java.util.Iterator是由某个私有类在java.util.AbstractList中实现的接口。我们如何将此类事件接收到java.util.Iterator
当我使用这两种方法时,我实际上不再接收事件了。你知道怎么做吗?提前谢谢。
发布于 2014-03-20 02:12:06
您可以使用以addClassFilter作为参数的ReferenceType方法,它(与String-arg版本不同)匹配给定类型的任何子类型。使用jdiscript和Java 8,激发Iterator方法调用可能类似于:
public static void main(String[] args) {
JDIScript j = new JDIScript(new VMLauncher(OPTIONS, MAIN).start());
OnVMStart start = se -> {
List<ReferenceType> rts = j.vm().classesByName("java.util.Iterator");
j.methodEntryRequest(me -> {
println("Your handler here");
}).addClassFilter(rts.get(0))
.enable();
};
j.run(start);
}https://stackoverflow.com/questions/7272491
复制相似问题