2017-04-12 164 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打開反彙編字節碼指令的打印(可能很有趣,因爲行號表將源行號與字節碼指令相關聯)。