2011-09-06 64 views
2

javap命令有幾個選項,其中一個是-l,它可以打印行號和局部變量表。假設一個Java程序編譯成功並有文件「Main.class」,因此運行javap -l Main可以產生類似:javap -l選項無法顯示行號信息

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; 

不過,我使用的是Java的一個類文件這個javap -l xxx命令程序,但行號和局部變量表的區域是空的(不應該是這樣)。 javap命令和其他選項(如-s,-verbose)可以正常工作,但只有與-l選項對應的行信息區域爲空。

有沒有人遇到過這種奇怪的情況?

+0

猜測行號都被剝奪,在不奇怪所有,意味着它的構建沒有調試信息和/或混淆。 – vickirk

+0

請隔離顯示問題的最小可能的測試用例,併發布生成此類的源代碼。 – kittylyst

回答

10

使用-g編譯代碼,否則該行號不保留(類似於堆棧跟蹤顯示「編譯代碼」,而不是行號)

+2

+1請參閱http://download.oracle.com/javase/6/docs/technotes/tools/windows/javac.html中的-g選項 –

+1

默認情況下,Oracle的JDK確實保留行號,但如果代碼是用-g:沒有,那麼它不會包括這個。 – Ben

+0

謝謝你們。答案和評論幫助很大。 – Ida