2012-02-14 63 views
5

Proguard的與「ProGuard和錯誤代碼1返回」崩潰,而這個崩潰的控制檯:Proguard的:拋出:IllegalArgumentException:堆疊具有不同的電流大小

java.lang.IllegalArgumentException: Stacks have different current sizes [0] and [1] 
at proguard.evaluation.Stack.generalize(Stack.java:125) 
at proguard.evaluation.TracedStack.generalize(TracedStack.java:140) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:683) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:587) 
at proguard.optimize.evaluation.PartialEvaluator.visitExceptionInfo(PartialEvaluator.java:1078) 
at proguard.classfile.visitor.ExceptionHandlerFilter.visitExceptionInfo(ExceptionHandlerFilter.java:67) 
at proguard.classfile.attribute.CodeAttribute.exceptionsAccept(CodeAttribute.java:186) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateExceptionHandlers(PartialEvaluator.java:1018) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:567) 
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264) 
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181) 
at proguard.optimize.evaluation.LivenessAnalyzer.visitCodeAttribute(LivenessAnalyzer.java:205) 
at proguard.optimize.evaluation.VariableOptimizer.visitCodeAttribute(VariableOptimizer.java:105) 
at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101) 
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79) 
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95) 
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91) 
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71) 
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504) 
at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47) 
at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) 
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:116) 
at proguard.optimize.Optimizer.execute(Optimizer.java:833) 
at proguard.ProGuard.optimize(ProGuard.java:306) 
at proguard.ProGuard.execute(ProGuard.java:115) 
at proguard.ProGuard.main(ProGuard.java:492) 

我已經把範圍縮小到一個try catch塊IOException。如果我註釋掉那個try catch塊,那麼它會在應用程序中的其他地方顯示另一個IOException嘗試catch塊的錯誤。如果我評論一個,那麼它就成功了。

所以在這兩個地方proguard似乎崩潰了IOException嘗試catch塊。這些代碼塊在以前的代碼中已經在沒有任何麻煩的情況下通過了proguard。

此外,還有其他IOException catch塊不會給出任何錯誤。

我試着用proguard 4.5,4.6和4.7來測試,但都失敗了。

任何想法?

謝謝

回答

8

這似乎是ProGuard中的一個錯誤。你可以在ProGuard's bug tracker上登錄,最好帶一個小的測試用例,可以讓我重現問題,或者你可以mail it給我(Eric,ProGuard的開發人員)。

目前,您可以通過關閉優化解決問題(使用選項-dontoptimize)。

+0

首先,感謝這麼多的ProGuard,它是真正真棒和易於使用。我繼續前進並提交了一個錯誤。爲了使這個堆棧溢出完成後,這裏是鏈接https://sourceforge.net/tracker/?func=detail&aid=3487940&group_id=54750&atid=474704再次感謝。 – cottonBallPaws 2012-02-15 18:45:00

+0

它仍然發生在ProGuard 5.2.1版本中:-( – 2016-07-02 15:52:15

+0

5.3.3也有,這裏的解決方案是什麼? – batmaci 2017-11-06 23:12:49

0

我在xamarin表單項目中遇到了proguard 5.3.3的這個錯誤。我的問題是我的文件丟失在我的proguard文件夾中,因爲當你從他們的網站下載一個版本的proguard時,你不會在下載的zip文件中有這些txt文件。備份舊的proguard並從那裏複製這些文件總是更好,或者您可以手動創建,我相信。

enter image description here

相關問題