在Java中,“调用上下文”(以及其他一些术语)的含义是什么?

时间:2012-06-11 10:24:01

标签: java static-analysis

我试图理解Java字节码/源代码的静态分析。

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

  1. context(in)敏感分析
  2. 调用上下文
  3. 有效通话网站
  4. 指向分析
  5. 任何人都可以用外行术语详细说明上述术语在Java语境中的含义。 搜索" context" "编程"在谷歌上提出了关于语境敏感语法,语言理论等的东西,但不是我需要的定义(除非它们的意思相同)。

2 个答案:

答案 0 :(得分:2)

  • 调用上下文:在分析某个位置的代码时,即时(假定的)调用者的代码,或者更常见的是(假定的)调用者的代码。< / p>

  • 有效呼叫网站:“呼叫上下文”的变体,主要针对直接呼叫者。

  • 上下文敏感分析:对代码位置的代码属性进行分析,该代码属性考虑了特定的调用上下文。进行此类分析的原因是属性通常更加详细和精确。

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

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

答案 1 :(得分:1)

指向分析(或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个调用站点。您正在分析的是活动呼叫站点。