【问题标题】:Get raw stacktrace from Firebase crash reporting从 Firebase 崩溃报告中获取原始堆栈跟踪
【发布时间】:2017-01-14 10:41:55
【问题描述】:

最近我发布了一个启用了 Firebase 崩溃报告的混淆 Android 应用。应用程序一旦崩溃,由于我没有上传映射文件,我无法正确读取堆栈跟踪。

所以我想下载堆栈跟踪并使用/retrace.sh -verbose mapping.txt ~/trace.txt手动对其进行去混淆

但是我无法获得原始形式的堆栈跟踪...

所以我有两个问题:

  1. 如何从他们网站上的 Firebase 崩溃报告选项卡获取原始表单?
  2. 如何在将应用发布到 Play 商店之前上传映射文件?

【问题讨论】:

  • 您能否发布一个从 Firebase 崩溃报告中手动复制的堆栈跟踪的示例?我可以回答你的两个问题
  • 如果您希望使用此功能从 Firebase 崩溃报告控制台复制堆栈跟踪,请同时提出功能请求。每份报告都很重要:firebase.google.com/support/contact/bugs-features

标签: android firebase firebase-crash-reporting


【解决方案1】:
  1. 目前,无法从 Firebase 崩溃报告中获取原始堆栈跟踪。因此,您需要在查看每个错误的详细信息时手动复制它们。

问题是反混淆不适用于从 Firebase 崩溃报告复制的堆栈跟踪字符串,这是因为堆栈跟踪的每一行开头缺少 at 语句。

例如,这就是您从 Firebase 崩溃报告中获得的信息

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.models.User.getUserName()' on a null object reference
com.example.views.adapters.ExampleAdapter.a (SourceFile:110)
com.example.views.adapters.ExampleAdapter.a (SourceFile:31)
b.a.a.a.b.a (SourceFile:54)
b.a.a.a.b.a (SourceFile:54)
android.support.v7.widget.RecyclerView$a.a (SourceFile:6279)
android.support.v7.widget.RecyclerView$a.b (SourceFile:6312)

您只需在包含SourceFile 字符串的每一行的开头添加at。结果应该是这样的

Exception java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.models.User.getUserName()' on a null object reference
at com.example.views.adapters.ExampleAdapter.a (SourceFile:110)
at com.example.views.adapters.ExampleAdapter.a (SourceFile:31)
at b.a.a.a.b.a (SourceFile:54)
at b.a.a.a.b.a (SourceFile:54)
at android.support.v7.widget.RecyclerView$a.a (SourceFile:6279)
at android.support.v7.widget.RecyclerView$a.b (SourceFile:6312)

使用这个新字符串,您应该能够像往常一样对堆栈跟踪进行去混淆处理。

我知道,这需要做很多工作,尤其是在发生多个错误时,但这是当前的解决方法,直到 Firebase 崩溃报告团队决定启用一项功能来下载原始堆栈跟踪或只是将 at 在细节处添加字符串,而不是对其进行修剪。

  1. Firebase 团队最近为此发布了一个崩溃报告插件。 The guide is here - Uploading ProGuard mapping files with Gradle

老实说,我无法成功启用此插件,仍然被指南迷惑。我真的希望他们能像在 Fabric Crashlytics 中一样简单,只需在 build.gradle 文件中添加 ext.enableCrashlytics = true。

还有另一种方法,在发布前故意使应用崩溃,然后生成一个没有错误的新发布 APK,然后您可以将 mapping.txt 文件上传到 Firebase 崩溃报告控制台。 :)

【讨论】:

  • 很好,快速的回答谢谢。我会等待是否有人能找到其他方法来获取原始堆栈跟踪,但我认为我没有其他方法。我会按照你建议的指南来做...
  • 工作,谢谢!我仍然无法对崩溃的第一行进行反混淆,但总比没有好:Exception java.lang.NullPointerException: Attempt to invoke virtual method 'void xxx.h.i.b$d.r()' on a null object reference。您对这第一行还有其他见解吗?
  • @Vasiliy,抱歉,我也无法对第一行进行去混淆处理:/ 但您应该已经知道问题出在哪里,只需查看该行下方的行。
猜你喜欢
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
相关资源
最近更新 更多