例如,以下错误消息显示从 GameController.java 中的第 435 行抛出 NullPointerException:
java.lang.NullPointerException
at com.fuu.mahjong.game.GameController.boolean showHint(boolean)(GameController.java:435)
at com.fuu.mahjong.game.GameViewActivity.boolean onTouch(android.view.View,android.view.MotionEvent)(GameViewAct
ivity.java:1552)
at android.view.View.dispatchTouchEvent(View.java:7122)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
...
其中 GameController.java 中的第 435 行是
clearCurrentSelections();
clearCurrentSelections()是GameController中的私有(private)方法,错误消息不会显示clearCurrentSelections()内部的跟踪信息,如果我将clearCurrentSelections()更改为public,则错误消息会显示clearCurrentSelections()中的哪一行导致NullPointerException .
使用ProGuard后有什么办法可以显示私有(private)方法内的跟踪信息吗?
最佳答案
ProGuard 的优化步骤可能已经内联了该方法。然后,虚拟机在堆栈跟踪中生成更少的行。如果您想避免这种情况,可以禁用方法内联:
-optimizations !method/inlining/*
在 Dalvik 虚拟机上,方法内联虽然提高了性能。
方法是否私有(private)对于优化来说并不重要,除非您的配置明确保留公共(public)方法。
关于java - 使用 ProGuard 后异常跟踪不显示私有(private)方法的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562503/