5

这个问题之前被问过,但答案非常笼统。我很想知道在静态代码分析的上下文中上下文意味着什么,特别是在 Java 中以及与术语上下文(非)敏感分析结合使用时。

例如,本文在此上下文中广泛使用了“上下文”。事实上,我还没有找到一个体面的上下文定义。

4

1 回答 1

17

您链接到的问题中的“上下文”一词似乎并未用于描述静态分析,因此您的问题确实是另一个问题。我不认为这个问题的答案是“通用的”。但它们绝对不是您正在寻找的具体答案。

上下文相关分析是一种过程间分析,在分析函数调用的目标时会考虑调用上下文。

以下是上下文相关分析如何工作的示例:

int a,b;

int *x;

void f(void)
{
  ++*x;
}

int main(){
  x = &a;
  f();

  x = &b;
  f();
}

这不是 Java,但您的问题主要是关于数据流分析中的上下文敏感性,所以我希望它不会太令人不安。

上下文相关分析器f()在此程序中分析(至少)两次,因为它是从调用站点调用的。这使它变得精确,因为f()每次的效果都完全不同。上下文相关的分析可以推断a==1b在第一次调用之后没有变化,并且在第二次调用之后两者ab都是1。上下文敏感性也使分析变得昂贵。

上下文不敏感的分析只会分析f()一次,并且通常只会产生“<code>f() 修改ab,因此在任何调用之后f(),这两个变量的内容都是未知的”类型的信息。

于 2012-11-15T12:09:44.420 回答