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