methodLineTables 数据字符串格式

methodLineTables 数据字符串对一个表进行编码,类中的每个可执行单元在该表中都有一个相应的条目。

methodLineTables 表中每个条目的值是相应的可执行单元的行号(在由 classSourceFile 数据字符串指定的源文件中)。例如,表中的条目号 5 就提供了可执行单元号 5 的行号。

以下是 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. 81 + 1 = 第二个方法的第二个可执行单元行号:82
注: 并不是所有可执行单元都具有与它们相关联的源代码信息。某些可执行单元是编译器为了实现 Java™ 语言的语义而创建的;例如,异常处理、初始化或同步。生成的这些可执行单元在 methodLineTables 字符串中具有一个完整行号 - 零。完整的零行号表示没有提供行号信息。当整个方法没有源代码信息时,它将表现为具有单个可执行单元,且对应于行号零。
以下是 methodLineTables 字符串的一些更多的示例以及它们的含义:
methodLineTables 字符串 含义
+5 如果第一个方法的第一个可执行单元的行号小于 10,则整个字符串以一个加号开始,以从行零开始增量系列。在该示例中,第一个方法的第一个可执行单元从第 5 行开始。
+0 如果第一个方法没有源代码信息,则字符串以 +0 开头。应用于这样一个方法的任何 executableUnit 探针段都将仅在方法的开头插入一次。
...#437,#457+123 ... 如果方法的第一个可执行单元在前一个方法的最后一个可执行单元之后大于九行的位置开始,则该模式是逗号,接着编号符号,然后是新方法中的第一个可执行单元的行号字符串。在该部分示例中,新方法中的第一个可执行单元在前一个方法的最后一个可执行单元之后的第 20 行开始。
...#437,+2 ... 有可能方法中最后一个可执行单元需要“#”表示法,并且与下一方法中的第一个可执行单元有较小的距离。在该部分示例中,一个方法的最后一个可执行单元在第 437 行开始,而下一方法的第一个可执行单元在第 439 行开始。
相关参考
探针段数据项
反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.