Fragment 探針物件

Fragment 探針物件是探針邏輯的規格。 它含有即將執行的 Java 程式碼。

至少需要一個 Fragment 物件。 它含有 Code 物件,以及 Code 物件中程式碼所參照的所有資料項目。 探針可以包含一個以上的 Fragment 物件,但是兩個 Fragment 物件不能同時具有同樣的類型

Fragment 物件的內容如下:
內容 說明
type 必要的項目。 如果是 Method 探針,則必須是 entryexitcatchstaticInitializerexecutableUnit。 如果是 Callsite 探針,則必須是 beforeCallafterCall。 一個探針當中,不可以混雜 Method 片段和 Callsite 片段。
下表將列出並說明片段類型,並且指出每一個片段類型所運用的探針類型:
片段類型 探針類型 說明
entry 方法 entry 片段是針對方法項目而執行。 entry 片段不會針對被 Probekit 插在類別當中的方法而執行。
exit 方法 exit 片段是針對方法結束而執行; 不管是正常結束、方法擲出異常狀況、還是當擲出異常狀況延伸到方法之外而結束都一樣。 exit 片段不會針對由 Probekit 插進類別當中的方法而執行。
catch 方法 catch 片段是在方法的 catch 子句開頭時執行, 或是在因為發生異常狀況而執行的 finally 子句開頭時執行。
staticInitializer 方法 staticInitializer 片段是在每一個被探測之類別的類別初值設定內執行。 如果該類別還沒有靜態初值設定,則會建立一個。 其他詳細資訊,請參閱 staticInitializer 探針片段
executableUnit 方法 executableUnit 片段會在方法中符合探針目標和過濾規格、 而且程式碼可以運用的每一個程式碼執行單元之前執行。 如果這個方法沒有程式碼行資訊,則會出現一個編號為零的執行單元。 其他詳細資訊,請參閱 executableUnit 探針片段
beforeCall Callsite 就在目標方法被呼叫之前,會在呼叫方法中立即執行 beforeCall 片段。 它不適用於 Method 探針。
afterCall Callsite afterCall 片段會在目標方法結束之後,在呼叫方法中立即執行; 不管它是正常結束,或是在目標方法擲出異常狀況時結束都一樣。 它不適用於 Method 探針。
附註:
  • 當探針套用在 宣告為 synchronized 的方法時, entryexitexecutableUnit 片段中的程式碼,很可能會受到在多個執行緒上同時執行的影響。 比方說,entry 片段和前幾個 executableUnit 片段, 可能會在方法同步化邏輯獲得鎖定之前執行,而 exit 片段可能會等到鎖定釋出之後再執行。
  • 探針可以有多個套用到方法中同一位置的片段; 比方說,entry 片段和第一個 executableUnit 位置。 另一個例子是 catch 片段及其相關的 executableUnit 位置, 因為異常狀況處理 catch 子句一定是代表新執行單元的開始。 在這些案例當中,executableUnit 片段的程式碼,會在 entrycatch 片段的程式碼之後執行。 而 entry 片段(如果出現的話)一定是在其他片段之前執行。
範例
<fragment type="entry">
   <data . . . />
   <code>
      . . . 
   </code>
</fragment>

內含於
探針物件

母主題: Probekit 參照

相關概念
Method 探針與 Callsite 探針

Copyright IBM Corporation and others 2000, 2004.