methodLineTables テーブル内の各エントリーの値は、classSourceFile データ・ストリングによって参照されるソース・ファイル内の行番号、つまり実行可能単位のソース行番号に対応します。
methodLineTables ストリングの例を、以下に示します。
#51+1201#75+11,41
ストリングの解釈方法を、以下に示します。
- 番号記号 (「#」) のすぐ後の数字は、クラスのソース・コードの完全 (相対でない) 行番号を表します。
例では、クラス内の最初のメソッドの最初の実行可能単位は行 51 にあります。
- プラス記号 ("+") の後の各数字 (1 桁ずつ) は、次の実行可能単位の行番号を生成するために前の行番号に加える行数を表します。
例では、プラス記号の後の数字 (+1201) を使用して、2 番目から 5 番目までの実行可能単位の行番号が計算されます。
- 51 + 1 = 2 番目の実行可能単位の行番号: 52
- 52 + 2 = 3 番目の実行可能単位の行番号: 54
- 54 + 0 = 4 番目の実行可能単位の行番号: 54 (1 つのソース行に 2 つの実行可能単位がある)
- 54 + 1 = 5 番目の実行可能単位の行番号: 55
- 行番号の増加が負であったり、10 以上であったりする場合は、その実行可能単位の完全行番号が指定されます。
例では、6 番目の実行可能単位は行 75 にあり、前の行番号 55 より 20 大きくなります。
この場合、6 番目の実行可能単位に完全行番号が指定され、そこから相対行番号の計算が再び始まります (#75+11):
- 75 = 6 番目の実行可能単位の行番号
- 75 + 1 = 7 番目の実行可能単位の行番号: 76
- 76 + 1 = 8 番目の実行可能単位の行番号: 77
- コンマ (「,」) は、あるメソッドが終わり、次のメソッドが始まることを示します。
コンマの後の数字と記号は、コンマの前と同じように解釈されます。
例では、2 番目のメソッドの最初の実行可能単位の行番号は、前のメソッドで計算された最後の行番号より 4 だけ大きくなります。つまり、相対行番号の計算は、次のようにコンマの後も続きます (,41)。
- 77 + 4 = 2 番目のメソッドの最初の実行可能単位の行番号: 81
- 88 + 1 = 2 番目のメソッドの 2 番目の実行可能単位の行番号: 89
注: すべての実行可能単位が、それに関連したソース情報を持つわけではありません。
中には、Java 言語のセマンティクスをインプリメントするために、コンパイラーによって作成されるものもあります (たとえば、例外処理、初期化、または同期など)。
このように生成された実行可能単位では、methodLineTables ストリングに完全行番号 0 が入っています。
完全行番号 0 は、行番号情報が使用可能になっていないことを示します。
メソッド全体にソース情報がない場合、行番号 0 に対応する実行可能単位が 1 つのものとして表示します。
methodLineTables ストリングおよびその意味について、さらに別の例を以下に示します。
methodLineTables ストリング |
意味 |
+5 |
最初のメソッドの最初の実行可能単位の行番号が 10 より小さい場合、ストリング全体がプラス記号で始まり、行 0 から増加を始めます。
この例では、最初のメソッドの最初の実行可能単位は行 5 から始まります。 |
+0 |
最初のメソッドにソース情報がない場合、ストリングは +0 で始まります。そのようなメソッドに適用する executableUnit プローブ・フラグメントは、メソッドの最初に 1 度だけ挿入されます。 |
...#437,#457+123... |
あるメソッドの最初の実行可能単位がその直前のメソッドの最後の実行可能単位より 10 行以上後で始まる場合、新しいメソッドの最初の実行可能単位のストリングのパターンは、コンマ、番号記号、および行番号になります。
この一部分の例では、新しいメソッドの最初の実行可能単位は、前のメソッドの最後の実行可能単位の 20 行後から始まります。
|
...#437,+2... |
メソッドの最後の実行可能単位で「#」の表記が必要で、かつ次のメソッドの最初の実行可能単位がそこからあまり離れていないこともあります。
この一部分の例では、あるメソッドの最後の実行可能単位が行 437 で始まり、次のメソッドの最初の実行可能単位は行 439 で始まります。
|