Java 烟尘-如何防止loadClassAndSupport创建空烟尘类?
使用烟尘框架(v.2.5.0),我尝试加载某个类:Java 烟尘-如何防止loadClassAndSupport创建空烟尘类?,java,soot,Java,Soot,使用烟尘框架(v.2.5.0),我尝试加载某个类: SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass"); 调用Scene之前#loadClassAndSupport类示例。MyClass不在场景中-这是正确的。 该类在类路径上也不存在,上面的语句会抛出一个RuntimeException,告知找不到该类。这也是正确的行为 但是在抛出异常之后,类示例。MyClass就在烟尘的场景中 因此,对Scene#loadCl
SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass");
调用Scene之前#loadClassAndSupport
类示例。MyClass
不在场景中-这是正确的。该类在类路径上也不存在,上面的语句会抛出一个
RuntimeException
,告知找不到该类。这也是正确的行为
但是在抛出异常之后,类示例。MyClass
就在烟尘的场景中因此,对
Scene#loadClassAndSupport的另一个调用将返回SootClass
实例,其中isPhantom
设置为false,但没有任何方法或字段
这种行为是烟尘框架的意图还是一个bug李>
如果有意,如何防止烟尘向场景中添加“虚拟”烟尘类
有没有其他方法可以测试某个类是否在烟尘的类路径中,而不将其添加到烟尘的场景中
更新:
一个丑陋但有效的解决办法是:
try {
SootClass sootClass = Scene.v().loadClassAndSupport( className );
sootClass.setApplicationClass();
// class found and loaded...
} catch(RuntimeException e) {
SootClass sootClass = Scene.v().loadClassAndSupport( className );
Scene.v().removeClass( sootClass );
// class not on soot's classpath or not loadable...
}
这看起来像个虫子。你能在这里存档吗?然后我们来看看。
无论如何,这里是讨论这些问题的好地方
干杯,
埃里克