2014-01-21 17 views
3

是否有可能獲取編譯類時設置的javac標誌?我的意思是我有一個第三方庫,我無法在Eclipse中調試它的類,因爲行:不可用如何從已編譯的類獲取javac標誌

我想看看編譯庫時使用了哪些標誌。 Here是我遇到的類似問題。它的作者寫道:

看着javac編譯標誌,我看到-g:none標誌。

那麼有可能看到這些標誌嗎?

+0

用於'的javac -g每個不同的值:*'具有不同的結果,如添加/移除源極線數,所以一個簡單的[javap的](http://docs.oracle.com/javase/7 /docs/technotes/tools/windows/javap.html#options)反彙編與適當的選項會給信息。 –

回答

2

您可以使用javap util。用-v標誌運行它。如果SRC與-g:source選項的javap編譯將打印輸出的第一行的文件路徑

Classfile /D:/workspace/x/target/classes/test/Test2.class 
... 

如果-g:vars使用,那麼你將看到LocalVariableTable

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

變種的名稱是否使用-g:lines然後javap將打印LineNumberTable

LineNumberTable: 
line 12: 0 
... 

您還可以用例如BCEL編程讀取這些東西:

JavaClass jc = Repository.lookupClass(Test2.class); 
    String sf = jc.getSourceFileName(); 
    Method m = jc.getMethods()[0]; 
    LineNumberTable ln = m.getLineNumberTable(); 
    LocalVariableTable lvt = m.getLocalVariableTable(); 
+0

這工作。雖然這樣我仍然不能獲得用於編譯類的標誌。如果沒有人提出更好的答案,我會接受它。 – Behnil

+0

不,你不會直接看到標誌,類文件格式是嚴格的http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html它不包含編譯標誌 –

+0

真棒,謝謝。 – Behnil