methodLineTables 字串格式

methodLineTables 資料字串會以編碼方式製作一個表格,在該表格中,類別的每一個執行單元都有一個代表項目。

methodLineTables 表中每一個項目的值, 都對應到由 classSourceFile 資料字串所參照之程式檔中的一個行號,亦即執行單元的程式碼行號。

下面就是一個 methodLineTables 字串的範例:
#51+1201#75+11,41
下面就是解譯字串的方法:
  • # 記號後面緊接著的數字,代表程式碼中某個類別的完整行號。 在本例當中,該類別第一個方法的第一個執行單元,是在第 51 行。
  • 加號 ("+") 後面的每一個數字,都代表要加到前一個行號的行數,以產生下一個執行單元的行號。 在本例當中,加號 (+1201) 後面的數字,是用來計算第二到第五個執行單元的行號。
    1. 51 + 1 = 第二個執行單元的行號:52
    2. 52 + 2 = 第三個執行單元的行號:54
    3. 54 + 0 = 第四個執行單元的行號:54(兩個執行單元位於同一個程式碼行上)
    4. 54 + 1 = 第五個執行單元的行號:55
  • 如果行號增量是負數,或者大於九,就會指定執行單元的完整行號。 在本例當中,第六個執行單元是在 75 行,比前一個行號(55 行)整整多了 20 行。 在這種情況下,第六個執行單元就會指定完整的行號,然後再開始計算相對行號 (#75+11):
    1. 75 = 第六個執行單元的行號
    2. 75 + 1 = 第七個執行單元的行號:76
    3. 76 + 1 = 第八個執行單元的行號:77
  • 逗號 (",") 代表一個方法的結束,以及下一個方法的開始。 逗號後面的數字和符號,之前已經解譯過了。 在本例當中,第二個方法的第一個執行單元行號,只比前一個方法的最後一個行號大 4, 因此在逗號後面繼續沿用相對行號 (,41):
    1. 77 + 4 = 第二個方法的第一個執行單元行號:81
    2. 88 + 1 = 第二個方法的第二個執行單元行號:89
附註:並不是所有的執行單元都有相關的程式碼資訊。 有的是由編譯器建立,來實作 Java 語言的語意;例如,異常狀況處理、起始設定或同步化。 這些產生的執行單元,在 methodLineTables 字串的完整行號是零。 完整行號為零,表示根本沒有行號資訊。 如果整個方法都沒有程式碼資訊,那就只有一個對應於行號零的執行單元。
下面是幾個 methodLineTables 字串範例及其意義:
methodLineTables 字串 意義
+5 如果第一個方法的第一個執行單元行號小於 10,則整個字串是以加號開頭,從第零行開始起跳。 在本例當中,第一個方法的第一個執行單元,是從第 5 行開始。
+0 如果第一個方法沒有程式碼資訊,則字串將由 +0 開頭。 任何套用於這類方法的 executableUnit 探針片段,只會在方法開頭處被插入一次。
...#437,#457+123... 如果方法的第一個執行單元,在前一個方法最後一個執行單元之後超過 9 行才啟動, 則型樣為一個逗點、一個 # 記號以及新方法第一個執行單元的行號字串。 在本局部範例當中,新方法的第一個執行單元,是從前一個方法最後一個執行單元之後的 20 行開始。
...#437,+2... 方法的最後一個執行單元可以要求附帶 "#" 表示法, 讓下一個方法的第一個執行單元再往後挪一點。 在本局部範例中,方法的最後一個執行單元是從 437 行開始, 而下一個方法的第一個執行單元則是從 439 行開始。

母主題: Probekit 參照

相關參照
Fragment 探針物件
Data 探針物件

Copyright IBM Corporation and others 2000, 2004.