Java 烟尘-如何防止loadClassAndSupport创建空烟尘类?

Java 烟尘-如何防止loadClassAndSupport创建空烟尘类?,java,soot,Java,Soot,使用烟尘框架(v.2.5.0),我尝试加载某个类: SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass"); 调用Scene之前#loadClassAndSupport类示例。MyClass不在场景中-这是正确的。 该类在类路径上也不存在,上面的语句会抛出一个RuntimeException,告知找不到该类。这也是正确的行为 但是在抛出异常之后,类示例。MyClass就在烟尘的场景中 因此,对Scene#loadCl

使用烟尘框架(v.2.5.0),我尝试加载某个类:

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...
    }
    

    这看起来像个虫子。你能在这里存档吗?然后我们来看看。

    无论如何,这里是讨论这些问题的好地方

    干杯, 埃里克