3

我试图了解 Java 字节码/源代码的静态分析。

这些术语经常出现,我无法在 Internet 上找到令人满意的定义:

  1. 上下文(非)敏感分析
  2. 调用上下文
  3. 主动呼叫站点
  4. 点对点分析

任何人都可以用外行术语详细说明上述术语在 Java 上下文中的含义。在 Google 上搜索“上下文”“编程”会找到关于上下文相关语法、语言理论等的内容,但不是我需要的定义(除非它们的意思相同)。

4

2 回答 2

2
  • 调用上下文:在分析某个位置的代码时,直接(假定)调用者的代码或更一般地说,导致此的一组(假定)调用者的代码。

  • 主动呼叫站点:专注于直接呼叫者的“呼叫上下文”的一种变体。

  • 上下文敏感分析:在考虑特定调用上下文的代码位置对代码属性的分析。进行这种分析的原因是属性通常更加详细和精确。

  • 上下文不敏感分析:对代码位置的分析,考虑到所有可能的调用上下文。这样做是因为它比上下文相关的分析更容易实现;它的缺点是答案通常不那么精确。

  • 指向分析:为每个指针分配确定(从而访问和更新)程序中该指针可以选择的实体集的分析。通常,感兴趣的实体由代码中的一组分配点表示,例如,任何实体的分配都可能发生在堆上或局部块中的每个位置。

于 2012-06-11T20:06:16.480 回答
1

指向分析(或 Java 上下文中的引用分析)将尝试在编译时推断指针在运行时可能指向的所有对象。这是合理的,但也是近似的。

A context-sensitive (CS) points-to analysis takes into account the calling context of a function while analyzing a function. For the program below, a CS points-to analysis can infer that x and z have different points-to information, i.e., they point to different objects, if y and w point to different objects.

main() {
    x = foo(y);
    z = foo(w);
}

foo (a) {
    return a;
}

In contrast, a context-insensitive (CI) analysis would not distinguish between the calling contexts and (imprecisely, but soundly) infer that x and z may alias (or may point to the same object).

Calling context is a sequence of call-sites in which the current (invocation of current) function appears. In the example, foo has two calling contexts, one at the first call-site from main and the second at line 2 of main. Active call-site is the one which you are analyzing.

于 2012-06-18T16:27:18.707 回答