在上下文(非)敏感分析中,“上下文”到底是啥意思?

Posted

技术标签:

【中文标题】在上下文(非)敏感分析中,“上下文”到底是啥意思?【英文标题】: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 找到一个类似的含义。 【参考方案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

以上是关于在上下文(非)敏感分析中,“上下文”到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

上下文对象是啥意思,在调用intent方法时,要传入一个上下文对象,到底是啥意思⊙_⊙

Java中的上下文到底是啥? [复制]

Java中的上下文到底是啥? [复制]

“CPU 跳跃”是啥意思?

上下文到底是啥?

“IB”和“UB”到底是啥意思?