如何为每个方法计算该方法可能引发的异常集,包括运行时异常



我正在尝试实现一个过程内分析,该分析为每个方法计算该方法可能引发的一组异常,包括通过throw语句显式引发的运行时异常。

到目前为止,我完全不知道如何从SOOT开始。有人能给我第一个提示吗?

您应该看看ThrowsAnalysis的实现。可以对分析进行参数化,以对哪个语句可以引发哪些异常做出不同的假设。然而,这种分析是过程内的,即必须对方法调用做出粗略的假设。如果您想精确地对方法调用建模,那么我建议您使用Heros进行过程间分析。

干杯,Eric

  1. 根据扩展或实现的内容,为源文件和.class文件体中的类和接口编制索引。如果A扩展了B,而B扩展了实现D的C,则A应该出现在B、C和D的所有类的集合中
  2. 从每个方法、初始化器、静态初始化器块等开始,找到它可能调用的每个构造函数或方法。创建一组被调用的方法,其中包括每个子类中的相应方法。如果调用D的get(int)方法,则必须在A、B和C中包含相应的方法。您可以使用步骤1中的索引找到它们
  3. 从感兴趣的方法开始,例如一个或多个主方法,形成可以直接或间接调用的所有方法和构造函数的列表。实际上,"间接调用"是步骤2中建立的关系的传递闭包
  4. 在步骤3的结果中检查每个可能调用的方法或构造函数。对于每个throw语句,报告操作数的类型

如果能从中获得好处来证明成本是合理的,我会非常、非常惊讶。

这是一个问题领域的例子。如果使用HashMap get()方法,则使用Object equals()hashCode()方法。每个类都直接或间接地扩展Object,因此任何equals()hashCode()方法中的任何throw语句的参数类型都在列表中。

相关内容

  • 没有找到相关文章

最新更新