Fragment 探针对象

Fragment 探针对象是探针逻辑的说明。它包含将执行的 Java 源代码。

至少需要具有一个 Fragment 对象。它包含 Code 对象以及该 Code 对象中的源代码引用的所有数据项。一个探针可以包含多个 Fragment 对象,但是任何两个 Fragment 对象都不能具有相同的类型

Fragment 对象包括以下属性:
属性 描述
类型 必需。对于方法探针,它必须是 entryexitcatchstaticInitializerexecutableUnit。对于调用位置探针,它必须是 beforeCallafterCall。 不能将方法段和调用位置段混用在单个探针中。
下表列示和描述了段类型,并且指示了每种段类型可以用于的探针类型:
段类型 探针类型 描述
entry 方法 entry 段在方法进入时执行。不会对由 Probekit 插入到类中的方法执行 entry 段。
exit 方法 exit 段在方法退出时执行,无论是正常退出、方法抛出异常还是抛出的异常传播到方法外部时。不会对由 Probekit 插入到类中的方法执行 exit 段。
catch 方法 catch 段在方法中的 catch 子句的开头执行,或者在由于发生异常而执行的 finally 子句的开头执行。
staticInitializer 方法 staticInitializer 段在每个被探测类的类初始化方法内执行。如果该类没有静态初始化方法,则将创建一个静态初始化方法。有关更多信息,请参阅 staticInitializer 探针段
executableUnit 方法 executableUnit 段在符合下列条件的方法中的代码的每个可执行单元之前执行:符合探针的目标和过滤器规范并且为其提供了源代码。如果该方法没有源代码行信息,它将以具有单个可执行单元(编号为零)的形式出现。有关更多信息,请参阅 executableUnit 探针段
beforeCall 调用位置 在调用方法中刚好在调用目标方法之前执行 beforeCall 段。这种段类型对于方法探针无效。
afterCall 调用位置 在调用方法中在目标方法退出(无论是正常退出还是当目标方法抛出异常时退出)之后立即执行 afterCall 段。这种段类型对于方法探针无效。
注意:
  • 当将探针应用于声明为同步的方法时,将不能保证 entryexitexecutableUnit 段中的代码不会在多个线程上同时执行。例如,entry 段和前几个 executableUnit 段可能会在方法同步逻辑获得锁定之前执行,而 exit 段可能会在释放锁定之后执行。
  • 一个探针可以具有应用于方法中的同一位置的多个段;例如,entry 段和第一个 executableUnit 位置。另一个示例是 catch 段和与它相关联的 executableUnit 位置,因为异常处理 catch 子句总是表示新的可执行单元的开始。在这些情况下,executableUnit 段的代码将在 entrycatch 段的代码之后执行。一种结果是,如果存在 entry 段,则它将总是在其它类型的段之前执行。
示例
<fragment type="entry">
   <data . . . />
   <code>
      . . . 
   </code>
</fragment>

包含于
Probe 对象

上级主题: Probekit 参考

相关概念
方法探针与调用位置探针

Copyright IBM Corporation and others 2000, 2004.