2

我正在操作一个 .class 文件。我正在使用InstrutionHandle包来一次获取一个说明。我通过getPosition()方法获得了指令的字节偏移量,我可以从字节偏移量中获取源行号吗?

4

1 回答 1

3

这取决于类文件是否使用调试信息进行编译。通常,编译器会插入一个LineNumberTable属性,该属性给出与每个字节码范围相对应的原始源代码行号。但是,该LineNumberTable属性只是元数据,因此作者可以将任何他们想要的内容放在那里,但有较小的限制,或者完全省略它。(通常通过编译-g: none或在其上运行混淆器来完成)

无论如何,属性的格式是整数个数(2 个字节),后跟(起始 pc,行号)对(都是 2 个字节)。你也可以有多个LineNumberTable属性。当然,如果您使用的是库,它可能已经为您解码了这些内容。

于 2012-11-22T06:43:06.247 回答