Перейти к основному содержимому

Эффективное разрешение проблем с Crash и ANR в Tracer SDK

Подключение зависимостей к проекту

В вашем <project>/<app-module>/build.gradle.

dependencies {
implementation "ru.ok.tracer:tracer-crash-report:0.2.7"
}

Также Tracer поддерживает сбор и анализ нативных крэшей. Если вы хотите собирать крэши, случившиеся в нативном коде, нужно подключить соответствующую зависимость (см. ниже).

dependencies {
implementation "ru.ok.tracer:tracer-crash-report-native:0.2.7"
}
предупреждение

На данный момент эта функциональность находится в активной разработке. Сбор уже работает, однако отображаются все нативные крэши пока без стэктрейса и прочих подробностей. Собрать и подсчитать их можно уже сейчас, а отображение и классификация дорабатываются.

Более подробное описание зависимостей — на странице «Быстрый старт».

Описание CrashReportConfiguration и CrashFreeConfiguration

В вашем Application.kt.

class MyApplication : Application(), HasTracerConfiguration {
override val tracerConfiguration: List<TracerConfiguration>
get() = listOf(
CrashReportConfiguration.build {
// ваши опции
},
CrashFreeConfiguration.build {
// ваши опции
},
)
}

Ниже представлены опции CrashReportConfiguration.Builder.

  • setEnabled — включает/выключает репортинг крэшей. По умолчанию включена.
  • setSendAnr — отключает отправку ANR. По умолчанию включена.
  • setNativeEnabled — включает/выключает репортинг нативных крэшей. Значение по умолчанию зависит от того, подключена ли зависимость tracer-crash-report-native. Если подключена, то и репортинг по умолчанию включен. Если не подключена — выключен. ⚠ Включить репортинг нативных крэшей без подключения соответствующей зависимости не выйдет, но существует возможность выключить репортинг при наличии зависимости.

Ниже представлены устаревшие или опасные опции CrashReportConfiguration.Builder.

  • setHost — устарела и будет удалена в версии 0.3.x. Если вам точно действительно надо поменять хост, используйте CoreTracerConfiguration.setHost;
  • setSendLogs — устарела и ничего не делает, будет удалена в версии 0.3.x;
  • setCountCrashFreeUsers — устарела и ничего не делает, будет удалена в версии 0.3.x, вместо нее предоставлена опция CrashFreeConfiguration.Builder.setEnabled;
  • setSendThreadsDump, setSendAsap, setMaxNonFatalExceptions — устарели и ничего не делают, будут удалены в версии 0.3.x.

Ниже представлены опции CrashFreeConfiguration.Builder.

  • setEnabled — включает/выключает подсчет crash free users. По умолчанию выключена!

Ниже представлены устаревшие или опасные опции CrashFreeConfiguration.Builder.

  • setExperimentalMaxSessionsToUpload — сколько сессий нужно накопить чтобы отправить батч. По умолчанию 10. Только для тестов!
  • setExperimentalMaxSessionTimeSpanToUpload — как долго копить сессии чтобы отправить батч. По умолчанию 4 часа (в миллисекундах). Только для тестов!
  • setExperimentalUploadSessionsFromYesterday — отправлять батч если обнаружены вчерашние (или ранее) сессии. По умолчанию включена.

Описание TracerCrashReport

Для отправки non-fatals используется метод TracerCrashReport.report(throwable).

// Залогировать не фатальную ошибку. 
TracerCrashReport.report(NonFatalException("I'll be ok soon"))

Крэши всегда группируются по общим частям стектрейса. По умолчанию non-fatals, однако есть способ повлиять на эту группировку.

Чтобы все non-fatals попали в одну группу вне зависимости от стектрейса, есть метод report с параметром issueKey.

// Залогировать нефатальную ошибку с ключом ISSUE-001 
TracerCrashReport.report(NonFatalException("What a terrible failure"), issueKey = "ISSUE-001")
предупреждение

Сейчас в Tracer есть лимит в 1 млн событий в день. Поэтому рекомендуется не злоупотреблять этим методом.

Также к событию можно добавить дополнительную информацию.