2017-04-12 103 views
1

我有一个名为的Hello World程序A.class。它是使用命令javac A.java编译的。它只是打印“hello world”如何让Java编译器在编译代码中生成行号码

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

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

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

+3

-g用于生成调试信息。类文件是字节码,不是人类可读的。您可以使用javap反汇编一个类文件。 – OldProgrammer

+1

您是否真的将'.class'文件的内容粘贴到问题中?你真的做到了吗?如果我可能会问,为什么你做了两次? –

+0

第一个是用javac。第二个是用javac -g <<<编译的。注意“g”。没有行号! Javap是伟大的,但仍然没有行号! –

回答

3

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

缺少的是一种有效检查生成的.class文件的方式,类似于工具将如何使用它。请尝试:

$ javap -l -c A.class 

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