上QQ阅读APP看书,第一时间看更新
2.5.3 LineNumberTable属性
2.5.2节介绍Code属性时曾简单介绍过LineNumberTable属性,它用于Java的调试,可指明某条指令对应于源码哪一行。图2-8是该属性的数据结构。
图2-8 LineNumberTable_attribute数据结构
图2-9为该属性的一个简单示例。
图2-9 LineNumberTable_attribute示例
图2-8是LineNumberTable_attribute的数据结构,其中最重要的是它所包含的line_number_table数组,该数组元素包含如下成员变量。
·start_pc:指向Code_attribute中code数组某处指令。
·line_number:说明start_pc位于源码的哪一行。注意,多个line_number_table元素可以指向同一行代码。因为一行Java代码很可能编译成多条指令。
注意 LineNumberTable只能被Code_attribute属性包含。
接着看图2-9中的main函数示例,用javap解析后得到了LineNumberTable属性,根据图中的红色虚框可知:
·LineNumberTable的line 7:0表示code数组里第1个指令码(即code[0])来自源码的第7行。
·code[0]解析后得到是new指令。
·查看左边的源代码可知,第7行确实对应的是一个new操作。