【问题标题】:What exactly does "context" mean in context-(in)sensitive analysis?在上下文(非)敏感分析中,“上下文”到底是什么意思?
【发布时间】:2012-11-04 00:47:06
【问题描述】:

这个问题是asked earlier,但答案非常笼统。我很想知道 context 在静态代码分析上下文中的含义,特别是在 Java 中以及与术语 context (in)sensitive analysis 结合使用时。 p>

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

【问题讨论】:

  • 我不确定它是否有明确的含义。上下文相关的静态分析可能会考虑当前分析函数的调用事件(或调用堆栈的某些抽象)。
  • “上下文”的含义本身是高度依赖上下文的。例如,可以在Wikipedia entry on data-flow analysis 找到一个类似的含义。

标签: java static-analysis dataflow


【解决方案1】:

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

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()的调用之后,这两个变量都是未知的”。

【讨论】:

  • 简单明了+1
猜你喜欢
  • 2012-07-11
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2015-05-29
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
相关资源
最近更新 更多