2013-06-13 34 views
1

使用煤煙框架(v.2.5.0)我試圖加載某一類:煤煙 - 如何防止loadClassAndSupport創建一個空的SootClass?

SootClass clazz = Scene.v().loadClassAndSupport("example.MyClass"); 

在調用Scene#loadClassAndSupportexample.MyClass不是在場景中 - 這是正確的。
該類也不存在於煙塵類路徑中,並且上面的語句拋出RuntimeException,告訴該類無法找到。這也是正確的行爲。

但之後異常已被拋出類example.MyClass是在煙塵的場景!
因此,Scene#loadClassAndSupport的另一個呼叫返回SootClass實例,其中isPhantom設置爲false,但它沒有任何方法或字段。

  1. 這是煙塵框架打算的行爲,還是它的錯誤?
  2. 如果是這樣,我該如何防止菸灰向場景中添加「虛擬」SootClass?
  3. 是否有另一種方法來測試某個類是否在Soot的類路徑中,而不將其添加到Soot的場景中?

更新:
醜陋,但工作的解決方法是:

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

回答

1

這看起來像一個錯誤。你可以請在這裏提交嗎?然後我們來看看。 https://github.com/Sable/soot/issues

無論如何,這是更好的討論這些問題的地方。

乾杯, 埃裏克

+0

我創建了一個問題:https://github.com/Sable/soot/issues/88 –