如何让Java编译器在编译后的代码中生成行号

How to make Java compiler generate line numbers in compiled code

我有一个名为 A.class 的 hello world 程序。它是使用命令 javac A.java 编译的。它所做的只是打印 "hello world".

接下来,我使用javac -g A.java编译。我期待看到行号,但看不到。知道发生了什么吗?

我确实看到 .class 编译的 javac 文件和编译的 javac -g 文件之间的某些特殊字符有非常小的差异。但是我看不到任何行号。

我对此的好奇是因为我想找出行号可能对性能有什么样的影响。其次,我想知道 log4j 等如何维护日志记录的行号。谢谢

编译命令不错,-g开启调试信息生成,确实。顺便说一句:默认生成行号,需要 -g:none 或类似的东西来关闭它。

缺少的是一种有意义地检查生成的 .class 文件的方法,类似于工具使用它的方式。尝试:

$ javap -l -c A.class

-l 打开行号表的打印。 -c 打开反汇编字节码指令的打印(可能很有趣,因为行号表将源行号与字节码指令相关联)。