OPAL-关于在 OPAL 中实现构造调用图

OPAL-Regarding implementing construct call graph in OPAL

在论文[A Software Product Line for Static Analyses(2014)]中,有一个与构造调用图(Listing7)相关的插图。

在这个例子中,Line14与构造调用图有关。当我检查 src 代码和 API 时,我能找到的是 DefaultCHACallGraphDomain.scala,它没有实现构造调用图。

因为我的目的是使用 OPAL 来构建调用图。是否有任何演示或文档可以帮助我了解 OPAL 中现有的 CallGraphDomain?目前,我只能找到一些 class 声明。

如果有人能给我一些与此主题相关的建议,我将不胜感激。

提前致谢。

论文中显示的界面已不存在,因此您可以完全忘记它。

获取 CallGraph class 的默认接口由您在将字节码加载到 Java 项目时检索到的 Project 对象提供。

通用代码示例:

val project = ... // a java project
val computedCallGraph = project.get(/* Some call graph key */)
val callGraph = computedCallGraph.callGraph // the final call graph interface.

计算出的调用图包含几项内容。它包含入口点、未解析的方法调用、构建时出错时的异常和实际调用图。

OPAL 为您提供了几种调用图算法,您可以通过将相应的调用图键传递给 Projectget 方法来检索每个算法。

目前,以下两个密钥可用并可以传递给 Project.get(更多信息可在 classes 的文档中找到):

  • CHACallGraphKey
  • VTACallGraphKey

分析模式 - 库与应用程序

要为软件项目构建有效的调用图,取决于选择哪种分析模式的项目类型。虽然应用程序提供了完整的信息(不完整的项目、class 加载等除外),但软件库旨在供其他项目使用。但是,在构建调用图时,必须牢记这两种不同的场景。可以在此处找到更多详细信息:org.opalj.AnalysisModes

OPAL 提供以下分析模式:

  • DesktopApplication(应用程序调用图安全)
  • LibraryWithClosePackagesAssumption(对于用于安全不敏感分析的调用图是安全的)
  • LibraryWithOpenPackagesAssumption(非常conservative/safe 用于安全分析)

分析模式可以在 OPAL 的配置文件中配置,也可以在运行时设置为项目设置。您可以在 /src/main/resources/reference.conf 下的 Common 项目中找到配置文件。

CHACallGraphKey 支持所有这些分析模式,而 VTACallGraphKey 目前仅支持应用程序。

注意:界面可能会在即将发布的版本中再次更改。