Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Melhores práticas para encontrar Crashes utilizando o CrashLytics

Melhores práticas para encontrar Crashes utilizando o CrashLytics

Nesse talk eu exploro as possibilidades que temos na utilização do CrashLytics, apresentando três dicas que nos ajudam a descobrir e resolver os crashes.

Rodrigo Sicarelli

October 18, 2016
Tweet

More Decks by Rodrigo Sicarelli

Other Decks in Technology

Transcript

  1. @rsicarelli "Crash" Um "crash" acontece quando alguma Exception/Error é lançada

    e o sistema (Android ou iOS) responde (ou não responde) fechando nosso app.
  2. @rsicarelli Crash Report "When an application crashes, a crash report

    is created and stored on the device." goo.gl/0oCw04
  3. @rsicarelli java.lang.IllegalStateException: Not a JSON Object: null at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90) at

    retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall $1$1.run(ExecutorCallAdapterFactory.java:68) ... 0 CoreFoundation 0x1e085e07 __exceptionPreprocess 1 libobjc.A.dylib 0x1d2eb077 objc_exception_throw 2 CoreFoundation 0x1df91949 -[__NSArrayM removeObjectAtIndex:] ... iOS Android Exemplos de Crash Reports
  4. @rsicarelli Enviando um feedback no Android No iOS, os relatórios

    não são em tempo real e imprecisos. No Android, há a necessidade do usuário enviar, manualmente, todos os relatórios
  5. @rsicarelli Dica #1 Com a chegada do CrashLytics, muitas empresas

    colocam o “crash-free users” como meta de time.
  6. @rsicarelli MyObject myObject; myObject.getSomething(); <------ BOOM Ao acontecer um crash,

    há a possibilidade de ignora-lo e aumentar o crash-free users:
  7. @rsicarelli try { MyObject myObject; myObject.getSomething(); } catch (Exception exception)

    { // Roubando no jogo } Ao acontecer um crash, há a possibilidade de ignora-lo e aumentar o crash-free users:
  8. @rsicarelli private void someMethod() { SomeObject someObject; OtherObject otherObject; someObject.anyOperation();

    otherObject.hiTwitter(someObject.getSomething()); otherObject.printSomeValue(); someObject.someMethodCausingCrash(); } Situações onde o desenvolvedor não faz a mínima ideia do que está acontecendo:
  9. @rsicarelli private void someMethod() { try { SomeObject someObject; OtherObject

    otherObject; someObject.anyOperation(); otherObject.hiTwitter(someObject.getSomething()); otherObject.printSomeValue(); someObject.someMethodCausingCrash(); } catch (Exception exception) { // Não faça isso, por favor } } Situações onde o desenvolvedor não faz a mínima ideia do que está acontecendo:
  10. @rsicarelli try { MyObject myObject; myObject.getSomething(); } catch (Exception exception)

    { Crashlytics.logException(exception); } Utilize o CrashLytics para rastrear todas os erros:
  11. @rsicarelli Dica #2 Root Cause Analysis (RCA) Analisar o Crash

    utilizando a técnica de RCA é muito difícil quando não é possível rastrear qual o commit exato que causou o erro goo.gl/9HV8ve
  12. @rsicarelli Dica #3 Breadcrumbs! Utilize a técnica de Breadcrumb para

    dar “spoilers” para enriquecer nosso crash reporting, adicionando informações relevantes para reproduzir aquele crash específico