片段探测对象

片段探测对象是探测逻辑的规范。它包含将要执行的 Java 源代码。

至少需要一个片段对象。它包含代码对象,以及代码对象中的源代码引用的所有数据项。探测可以包含多个片段对象,但两个片段对象不能有相同的 type

片段对象包含以下属性:
属性 描述
type 必需。对于方法探测,它必须是 entryexitcatchstaticInitializerexecutableUnit。对于 callsite 探测,它必须是 beforeCallafterCall。 不能在单个探测中混合方法片段和 callsite 片段。
下表列出并描述了片段类型,并且指出了每种片段类型可以用在哪种探测中:
片段类型 探测类型 描述
entry 方法 entry 片段在方法入口上执行。对于由 Probekit 插入到类中的方法,将不会执行 entry 片段。
exit 方法 exit 片段在方法出口上执行;无论是正常出口、方法抛出异常时还是抛出的异常传播出方法范围时。对于由 Probekit 插入到类中的方法,将不会执行 exit 片段。
catch 方法 catch 片段在方法中的 catch 子句开始处以及异常导致执行的 finally 子句的开始处执行。
staticInitializer 方法 staticInitializer 片段在每个探测的类的类初始化方法中执行。如果类尚没有静态初始化方法,则将创建一个。有关更多信息,请参阅 staticInitializer 探测片断
executableUnit 方法 executableUnit 片段在与探测的目标和过滤器规范相匹配并且可提供源代码的方法中代码的每个可执行单元之前执行。如果该方法没有源代码行信息,则它将显示为具有单个可执行单元,编号为零。有关更多信息,请参阅 executableUnit 探测片段
beforeCall callsite beforeCall 片段就在调用目标方法前的调用方法中执行。对于方法探测无效。
afterCall callsite afterCall 片段就在目标方法退出后的调用方法中执行;无论是正常退出还是目标方法抛出异常时。对于方法探测无效。
Notes:
  • 当将探测应用于被声明 synchronized 的方法时,不保证可以防止在多个线程上同时执行 entryexitexecutableUnit 片段中的代码。例如,可能在方法同步逻辑获得锁之前执行 entry 片段及最前面的一些 executableUnit 片段,而在已释放该锁之后执行 exit 片段。
  • 一个探测可以具有适用于方法中相同位置的多个片段;例如,entry 片段和第一个 executableUnit 位置。另一个例子是 catch 片段及其相关联的 executableUnit 位置,因为处理 catch 子句的异常总是表示新可执行单元的开始。在这些情况中,executableUnit 片段的代码将在 entrycatch 片段的代码之后执行。一个结果就是 entry 片段(如果存在)将总是在其它类型的片段之前执行。
示例
<fragment type="entry">
   <data . . . />
   <code>
      . . . 
   </code>
</fragment>

包含于
探测对象

父主题:Probekit 元素参考

相关参考
Probekit 示例
executableUnit 探测片段
staticInitializer 探测片断

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2004. All Rights Reserved.