2017-03-28 73 views
0

ASM字節碼操作框架的visitLine()方法訪問編譯它的源代碼的每一行。ASM ByteCode - 覆蓋visitLine()方法

如果我有一個線像

Line 45: ArrayList<Integer> test = new ArrayList< 
Line 46:         Integer>(); 

的源代碼分解然後同時顯示45和46有沒有一種方法來覆蓋它,以便它顯示了這個執行剛剛45行?

+1

在字節碼中它將只是一行 – esin88

+1

@ esin88好吧。我已經重寫了visitLine方法來打印所有訪問過的行。它顯示45和46都是預期的嗎? – maddie

+1

如果在源代碼中有兩行代碼需要編譯到操作碼的代碼換行符,這將保留在字節代碼中。這是由於字節碼將表中的行存儲在表格屬性中,該表格屬性將操作碼範圍與行號相關聯。儘管ASM簡化了整個過程。 –

回答

1

ASM添加了由Jaca編譯器添加的所有行信息。如果你想刪除一行,你需要自己過濾這些行。例如,您可以檢查一行是否不包含指令,您可以禁止對任何底層方法訪問者的調用。

+0

好的。感謝您的建議。我會嘗試。 – maddie