JVM在运行时如何知道代码的行数?

3
当一个 .java 文件被编译后,它会生成一个包含字节码的 .class 文件。JVM 会执行这个字节码。在此过程中,如果发生异常,源代码中出错的行数也会被提及。然而,字节码和源代码中的行号完全不同,并且在编译期间字节码也不会存储行号,因为我没有找到任何与之相关的助记符(而且存储行号只会增加代码大小)。那么有人能告诉我 JVM 如何获取异常抛出时源代码中的确切行数吗?

5
编译器会生成调试信息,因此你的说法“字节码也不存储行号”是不正确的。它没有保留原始的行数和其他内容,但该信息确实存在。 - user10992464
2
javac的_javadoc_中阅读有关-g选项的信息。 - Abra
@Abra 我只是随便看了一眼..我觉得我问这个问题还太早了。谢谢 :) - Sourav Kannantha B
1个回答

7

JVM规范提供了类文件(字节码)格式的参考。行号存储在属性LineNumberTable中。您还可以尝试在某个.class文件上运行以下Java反汇编器命令(JDK提供的javap),以查看它们:

javap -l MyClass.class

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接