2

このjavapコマンドにはいくつかのオプションがあり、そのうちの 1 つが で-l、行番号とローカル変数テーブルを出力できます。Java プログラムが正常にコンパイルされ、ファイル「Main.class」があるとします。実行javap -l Mainすると、次のような結果が得られます。

public static void main(java.lang.String[]);

LineNumberTable:
 line 100: 0
 line 101: 27
 line 275: 54

LocalVariableTable:
 Start Length Slot Name Signature
 0     55     0    args  [Ljava/lang/String;

ただし、javap -l xxxあるJavaプログラムのクラスファイルでこのコマンドを使用していますが、行番号とローカル変数テーブルの領域が空です(空であってはなりません)。javapコマンドと 、 などの他のオプションは正常-s-verbose機能しますが、オプションに対応する行情報領域のみ-lが空です。

誰もそのような奇妙なケースに遭遇したことがありますか?

4

1 に答える 1

10

-g を使用してコードをコンパイルします。そうしないと、行番号が保持されません (行番号の代わりに「コンパイルされたコード」を表示するスタック トレースに似ています)。

于 2011-09-06T14:48:44.043 に答える