methodLineTables 表中的每个条目值对应于 classSourceFile 数据字符串引用的源文件中的一个行号,即可执行单元的源代码行号。
以下是 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
- 88 + 1 = 第二个方法的第二个可执行单元行号:89
注:不是所有的可执行单元都将有与它们相关联的源代码信息。一些可执行单元由编译器创建,用于实现 Java 语言的语义;例如,异常处理、初始化或同步。这些生成的可执行单元在 methodLineTables 字符串中将有完整的零行号。完整的零行号表示没有可用的行号信息。当整个方法没有源代码信息时,它将表现为具有一个单独的可执行单元,该单元对应于行号零。
以下是 methodLineTables 字符串的一些更多的示例以及它们的含义:
methodLineTables 字符串 |
含义 |
+5 |
如果第一个方法的第一个可执行单元的行号小于 10,则整个字符串以一个加号开始,以从行零开始增量系列。在该示例中,第一个方法的第一个可执行单元从第 5 行开始。 |
+0 |
如果第一个方法没有源代码信息,该字符串将以 +0 开始。所有适用于这种方法的 executableUnit 探测片断将仅被插入一次,插入位置是方法的开头。 |
...#437,#457+123 ... |
如果方法的第一个可执行单元在前一个方法的最后一个可执行单元之后大于九行的位置开始,则该模式是行号,接着数字符号,然后是新方法中的第一个可执行单元的行号字符串。在该部分示例中,新方法中的第一个可执行单元在前一个方法的最后一个可执行单元之后的第 20 行开始。 |
...#437,+2 ... |
有可能方法中最后一个可执行单元需要“#”表示法,并且与下一方法中的第一个可执行单元有较小的距离。在该部分示例中,一个方法的最后一个可执行单元在第 437 行开始,而下一方法的第一个可执行单元在第 439 行开始。 |