如何使Java编译器在已编译的代码中生成行号

Apu*_*ngh 3 java javac

我有一个名为A.class的hello世界程序。它是使用command编译的javac A.java。它所做的只是打印“ hello world”

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

我确实看到在javac编译的.class文件和javac -g编译后的某些特殊字符之间的细微差别。但是我看不到任何行号。

我对此的好奇心是因为我想找到线数可能会对性能产生什么样的影响。其次,我想知道log4j等如何维护记录的行号。谢谢。

Ste*_*ann 5

编译命令很好-g,的确打开了调试信息的生成。顺便说一句:默认情况下会生成行号,需要-g:none或类似的方法来关闭它。

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

$ javap -l -c A.class
Run Code Online (Sandbox Code Playgroud)

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