“背景”究竟在上下文(中)敏感分析中意味着什么?

时间:2012-11-15 12:03:21

标签: java static-analysis dataflow

这个问题是asked earlier,但答案非常通用。我有兴趣知道 context 在静态代码分析的上下文中意味着什么,特别是Java,以及与术语 context(in)敏感分析结合使用时。

例如this paper在此上下文中广泛使用“上下文”。事实上,我还没有找到合适的背景定义。

1 个答案:

答案 0 :(得分:8)

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

context-sensitive analysis是一个过程间分析,在分析函数调用的目标时会考虑调用上下文。

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

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()一次,并且通常只生成“f()修改ab的排序信息,因此在任何调用之后到f(),这两个变量的内容都是未知的。“