[英]ASM (from ObjectWeb) not calculating MaxStack correctly even though ClassWriter( COMPUTE_MAX + COMPUTE_STACK ) is set
嘗試加載使用ASM生成的類時,出現預期的ClassVerifyErrors。 在進一步檢查中,我可以看到jvm是正確的,並且該方法正在談論具有無效的MAX_STACK值。 奇怪的是正在使用自動計算堆棧和最大本地選項,因此這應該不成問題...帶有無效選項的方法非常簡單,但結果卻是錯誤的字節碼。
我已經用預期的方法編寫了一個類,並將我的asm生成的類與javac生成的類進行了比較,字節碼匹配只有唯一的錯誤是最大堆棧為0,這是錯誤的,而javac設置為2。
我想避免不得不自己計算最大堆棧/局部值。
如果字節碼無效,則最大堆棧和變量計算可能會產生錯誤的結果。 您可以通過CheckClassAdapter運行生成的代碼來驗證。
例如,
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
// generate code into cw instance...
PrintWriter pw = new PrintWriter(System.out);
CheckClassAdapter.verify(new ClassReader(cw.toByteArray()), true, pw);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.