Получить необработанную трассировку стека из отчетов о сбоях Firebase

Недавно у меня было опубликовано запутанное приложение для Android с включенными отчетами о сбоях Firebase. Однажды приложение вылетает, и, поскольку я не загрузил файл сопоставления, я не могу правильно прочитать трассировку стека.

Поэтому я хотел загрузить трассировку стека и вручную деобфусцировать ее с помощью /retrace.sh -verbose mapping.txt ~/trace.txt

Однако я не могу получить необработанную форму трассировки стека...

Итак, у меня есть 2 вопроса:

  1. Как я могу получить необработанную форму с вкладки отчетов о сбоях Firebase на своем сайте?
  2. Как я могу загрузить файл сопоставления перед публикацией приложения в магазине игр?

person VizGhar    schedule 14.01.2017    source источник
comment
Можете ли вы опубликовать пример вашей скопированной вручную трассировки стека из отчетов о сбоях Firebase? Я могу ответить на оба ваших вопроса   -  person Wilik    schedule 14.01.2017
comment
Если вы хотите, чтобы эта возможность копировала трассировку стека из консоли отчетов о сбоях Firebase, также сделайте запрос на эту функцию. Каждый отчет важен: firebase.google.com/support/contact/bugs-features   -  person Doug Stevenson    schedule 14.01.2017


Ответы (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)

Вам просто нужно добавить at в начале каждой строки, содержащей SourceFile строку. Результат должен выглядеть так

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 совсем недавно выпустила для этой цели плагин Crash Reporting. Руководство здесь — Загрузка файлов сопоставления ProGuard с помощью Gradle

Честно говоря, я не смог успешно включить этот плагин, все еще сбит с толку руководством. Я очень надеюсь, что они сделают это так же просто, как в Fabric Crashlytics, просто добавив ext.enableCrashlytics = true в файл build.gradle.

Есть и другой способ: намеренно завершить работу приложения перед выпуском, затем создать новый выпуск APK без ошибки, а затем загрузить файл mapping.txt в консоль Firebase Crash Reporting. :)

person Wilik    schedule 14.01.2017
comment
Хороший и быстрый ответ спасибо. Я подожду, найдет ли кто-нибудь другой способ получить необработанную трассировку стека, но я думаю, что другого пути нет. Я сделаю это по инструкции, которую вы предложили... - person VizGhar; 14.01.2017
comment
Сработало, спасибо! Я до сих пор не могу деобфусцировать самую первую строчку краша, но это все же намного лучше, чем ничего: Exception java.lang.NullPointerException: Attempt to invoke virtual method 'void xxx.h.i.b$d.r()' on a null object reference. Есть ли у вас дополнительные сведения об этой самой первой строке? - person Vasiliy; 25.02.2017
comment
@Vasiliy, ах, извините, я также не могу расшифровать эту первую строку: / но вы уже должны знать, в чем проблема, просто взглянув на строки под этой строкой. - person Wilik; 28.02.2017