簡體   English   中英

即使設置了ClassWriter(COMPUTE_MAX + COMPUTE_STACK),ASM(來自ObjectWeb)仍無法正確計算MaxStack

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM