我試圖執行一個程序內分析,爲每個方法計算該方法可能拋出的異常集,包括通過throw語句顯式拋出的運行時異常。如何爲每種方法計算該方法可能拋出的異常集,包括運行時異常?
到目前爲止,我完全失去了如何開始與SOOT。任何人都可以給我第一個提示?
我試圖執行一個程序內分析,爲每個方法計算該方法可能拋出的異常集,包括通過throw語句顯式拋出的運行時異常。如何爲每種方法計算該方法可能拋出的異常集,包括運行時異常?
到目前爲止,我完全失去了如何開始與SOOT。任何人都可以給我第一個提示?
你應該看看ThrowsAnalysis的實現。可以對分析進行參數化,以便對哪些語句可以拋出哪些異常做出不同的假設。該分析是程序內的,但是,必須對方法調用做出粗略的假設。如果您想要精確建模方法調用,那麼我建議使用Heros進行程序間分析。
乾杯, 埃裏克
get(int)
方法,則必須在A,B和C中包含相應的方法。可以使用步驟1中的索引找到它們。如果從中受益,證明成本合理,我將非常非常驚訝。
下面是問題區域的一個示例。如果使用方法HashMap
get()
方法,您可以使用Object
equals()
和hashCode()
方法。每個課程直接或間接地延伸Object
,因此任何equals()
或hashCode()
方法中的任何throw語句的參數類型都在列表中。
在第4步中,你的意思是拋出子句(foo拋出IOException)或拋出語句(拋出新的異常)? – EijiAdachi
@EijiAdachi「扔語句」 - 我已經修改過。但是,請記住操作數不一定是新構造的對象 - 它可能是現有的異常,或者是通過某種方法調用獲得的異常。 –
只是要清楚,你要明確地列舉每一個可能的運行時類異常可能被拋出,其中包括調用的方法,其來源可能無法使用拋出'RuntimeException's? – chrylis
我想列舉所有異常:既有選中也有未選中。更具體地說,我想枚舉實際上正在引發哪些異常,因爲方法可能會在其接口中聲明更通用的檢查異常。 關於源代碼,將會有兩種情況:可用的源案例,並且只有.class可用。 – EijiAdachi
但是,您至少會擁有所有實際實現類的'.class'文件?你的系統不允許任何在運行時提供的'interface'實現,比如通過SPI? – chrylis