2017-04-12 5 views
1

私はというHello Worldプログラムを持っています。A.クラスです。コマンドjavac A.javaを使用してコンパイルされました。それは印刷"こんにちは世界"です。コンパイル済みコードでJavaコンパイラが行番号を生成する方法

次に、javac -g A.javaを使用してコンパイルしました。私は行番号を見ることを期待していますが、見ることはできません。何が起こったのか?

コンパイルされたjavacの.classファイルとコンパイルされたjavacの間で、いくつかの種類の特殊文字に小さな違いがあります。しかし、私は行番号を見ることができません。

私の好奇心は、パフォーマンスにどのような影響が及ぶかを知りたいからです。次に、log4jなどがロギングの行番号をどのように維持しているかを知りたい。ありがとう。

+3

-gデバッグ情報を生成するためのものです。クラスファイルはバイトコードであり、人間が読むことはできません。 javapを使ってクラスファイルを逆アセンブルすることができます。 – OldProgrammer

+1

実際に '.class'ファイルの内容を質問に貼り付けましたか?本当にやったことはありますか?そして私が尋ねることができるなら、なぜあなたはそれを2回したのですか? –

+0

最初はjavacを使用しています。 2番目はjavac -g <<<でコンパイルされます。 "g"に注目してください。行番号なし! Javapは素晴らしいですが、まだ行番号はありません! –

答えて

3

コンパイルコマンドが良好です。-gは、デバッグ情報の生成を実際にオンにします。 BTW:行番号はデフォルトで生成され、これをオフにするには-g:noneまたはそれに類するものが必要です。

欠けているものは、ツールが使用する方法と同様に、生成された.classファイルを意味のある方法で検査する方法です。試してみてください:

$ javap -l -c A.class 

-lは、行番号テーブルの印刷をオンにします。 -cは、逆アセンブルされたバイトコード命令の印刷をオンにします(行番号テーブルはソース行番号とバイトコード命令を関連付けるので興味深いかもしれません)。

関連する問題