java - 使用 ProGuard 后异常跟踪不显示私有(private)方法的行号

标签 java android exception proguard

例如,以下错误消息显示从 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/

相关文章:

c++ - 如何从 FAILED(HRESULT) 引发 std::system_error 异常?

java - Java中基于权重的对象匹配(不是内存中对象的实际权重)

java - MongoDB - Java 驱动性能

java - 无法通过 getIdentifier 检索资源

vba - 如何处理另一个工作簿的 Workbook_Open 事件中生成的错误?

python - 捕获异常并立即再次引发它有什么值(value)吗?

java - 包含用于 JUnit 测试的 OSGI jar

java - 我们如何测试 JFormattedTextField 是否为空?

android - 处理 Android 设备关闭(ISSUE : The intent is received only the first time)

android - 如何在可扩展列表中指定子项的排序顺序?