【问题标题】:In Java what is meant by "calling context" (and some other terms)?在 Java 中,“调用上下文”(以及其他一些术语)是什么意思?
【发布时间】:2012-06-19 00:27:18
【问题描述】:

我正在尝试了解 Java 字节码/源代码的静态分析。

这些术语经常出现,我无法在 Internet 上找到令人满意的定义:

  1. 上下文(非)敏感分析
  2. 调用上下文
  3. 活动呼叫站点
  4. 指向分析

任何人都可以用外行术语详细说明上述术语在 Java 上下文中的含义。 在 Google 上搜索“上下文”“编程”会找到关于上下文相关语法、语言理论等的内容,但不是我需要的定义(除非它们的意思相同)。

【问题讨论】:

  • StackOverflow is not a research assistant。这些都是非常标准的 CS 术语。
  • 同意 EJP。另外,请一次回答一个问题
  • "SO 社区不会为您编写完整的解决方案、开发完整的问题演练或为您进行背景研究,除非您的问题是具体的并且集中在相当小的范围内。”我不认为它真的适用,他问的是一个简单的问题,可以由对此有合理知识的人回答,他没有将我们用作研究,我相信这不是你可以用谷歌搜索的东西。

标签: java static-analysis


【解决方案1】:
  • 调用上下文:在分析某个位置的代码时,直接(假定)调用者的代码或更一般地,导致此的一组(假定)调用者的代码。

  • 活动呼叫站点:“呼叫上下文”的一种变体,侧重于直接呼叫者。

  • 上下文相关分析:在考虑特定调用上下文的代码位置分析代码属性。进行这种分析的原因是属性通常更加详细和精确。

  • 上下文不敏感分析:对代码位置的分析,考虑到所有可能的调用上下文。这样做是因为它比上下文相关的分析更容易实现;它的缺点是答案通常不那么精确。

  • 指向分析:确定每个指针分配(从而访问和更新)程序中该指针可能选择的实体集的分析。通常,感兴趣的实体由代码中的一组分配点表示,例如,任何实体的分配都可能发生在堆上或本地块中的每个位置。

【讨论】:

    【解决方案2】:

    指向分析(或 Java 上下文中的引用分析)将尝试在编译时推断指针在运行时可能指向的所有对象。这是合理的,但很近似。

    上下文相关 (CS) 指向分析在分析函数时会考虑函数的调用上下文。对于下面的程序,CS 指向分析可以推断出 x 和 z 具有不同的指向信息,即它们指向不同的对象,如果 y 和 w 指向不同的对象。

    main() {
        x = foo(y);
        z = foo(w);
    }
    
    foo (a) {
        return a;
    }
    

    相比之下,上下文不敏感 (CI) 分析不会区分调用上下文,并且(不精确但可靠地)推断 x 和 z 可能有别名(或可能指向同一个对象)。

    调用上下文是当前(当前的调用)函数出现的调用点序列。在示例中,foo 有两个调用上下文,一个在 main 的第一个调用站点,第二个在 main 的第 2 行。活动呼叫站点是您正在分析的站点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2011-08-15
      • 2017-04-15
      • 2011-10-04
      相关资源
      最近更新 更多