在上下文(非)敏感分析中,“上下文”到底是啥意思?
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==1
和b
在第一次调用后没有变化,而a
和b
在第二次调用后都是1
。上下文相关性也使分析变得昂贵。
上下文不敏感的分析只会分析一次f()
,并且通常只会产生“f()
修改a
或b
这样的信息,因此在任何对f()
的调用之后,这两个变量都是未知的”。
【讨论】:
简单明了+1以上是关于在上下文(非)敏感分析中,“上下文”到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章