【发布时间】:2018-10-26 04:04:28
【问题描述】:
自从我在 Google Play 商店中发布了我的应用的新版本后,我在 Android 开发者控制台中收到了崩溃报告。
我在发布新版本后立即上传了 ProGuard mappings.txt。因此,所有日志都不会混淆(所有类名和方法都以明文形式出现)。但是我仍然不确定阅读它们是否热。
主要存在三个问题:
- 报告只显示崩溃方法,但没有行号。所以我不知道方法的哪一部分导致了崩溃。
- 一些崩溃报告显示了使用
OR的不同方法。这是什么意思? - 并非所有报告都经过去混淆处理。有些仍然显示为匿名类和方法名称
示例:
// Crash Log with is NOT obfuscated
Caused by: java.lang.NullPointerException:
1: at com.example.MyApp.Path.To.Package.MyClass.myMethod1 (MyClass.java) // <-- No Line Numbers...
or .myMethod2 (MyClass.java) // <-- WHAT does this OR mean???
or .myMethod3 (MyClass.java)
2: at com.example.MyApp.Path.To.Package.MyClass.onCreateView (MyClass.java)
3: at android.support.v4.app.Fragment.performCreateView (Fragment.java)
4: at android.support.v4.app.FragmentManagerImpl.access$500 (FragmentManagerImpl.java)
or .access$600 (FragmentManagerImpl.java)
or .addFragment (FragmentManagerImpl.java)
or .allocBackStackIndex (FragmentManagerImpl.java)
or .animateRemoveFragment (FragmentManagerImpl.java)
...
5: at android.support.v4.app.FragmentManagerImpl.access$500 (FragmentManagerImpl.java)
...
// Other crash seems to show the same problem but is still obfuscated
Caused by: java.lang.NullPointerException:
1: at com.example.MyApp.Path.To.Package.MyClass.a (MyClass.java:89) // <-- Line numbers available here...
2: at com.example.MyApp.Path.To.Package.MyClass.b (MyClass.java:40)
3: at android.support.v4.app.Fragment.performCreateView (Fragment.java)
... // Same call stack as above
问题:
- 为什么有些日志经过去混淆处理而其他(似乎显示相同的错误)没有?上传映射文件后创建的两个日志。没有映射文件的旧版本的日志显示明确的“日志被混淆”消息
- 调用堆栈中
OR语句的含义是什么?这是否意味着,这些方法中的每一个都发生了异常(这应该怎么可能)? - 为什么去混淆的日志中没有行号?给定的方法很长,没有任何进一步的信息,我不知道究竟是什么导致了这个问题。混淆后的行号似乎指向随机行,这些行与实际代码没有任何关联。
所以主要问题是:
如何使用日志中的信息找到崩溃的根源?
【问题讨论】:
标签: android crash-reports callstack