这个问题是asked earlier,但答案非常通用。我有兴趣知道 context 在静态代码分析的上下文中意味着什么,特别是Java,以及与术语 context(in)敏感分析结合使用时。
例如this paper在此上下文中广泛使用“上下文”。事实上,我还没有找到合适的背景定义。
答案 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==1
和b
未更改,第二次调用后a
和b
都为1
。上下文敏感性也使分析变得昂贵。
上下文不敏感的分析只会分析f()
一次,并且通常只生成“f()
修改a
或b
的排序信息,因此在任何调用之后到f()
,这两个变量的内容都是未知的。“