Символизация и группировка сбоев

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

Для преобразования кода в исходное состояние используются маппинги – файлы или структуры данных, в которых содержится информация о том, как исходные данные соотносятся с обфусцированными. В зависимости от платформы формат этих файлов может отличаться:

  • mapping.txt – для Android;
  • .dSYM – для iOS;
  • soursemap – для JS и т.д.

Символизация в Tracer

Tracer самостоятельно деобфусцирует данные о крэшах приложений, применяя маппинги, загруженные в сервис на момент обработки крэша. Если Tracer не смог обнаружить соответствующие маппинги, сбой не будет символизирован и отобразится в обфусцированном виде:

ВАЖНО! Маппинги применяются только к новым событиям.

В случае, если вы загрузили в Tracer новые маппинги, все старые крэши останутся в прежнем виде:

Принудительной символизации в Tracer пока не предусмотрено.

Подробнее о загрузке символов aka файлов маппингов можно ознакомиться в соответствующей главе документации к SDK для вашей платформы.

Группировка сбоев

СrashId – уникальный идентификатор события, влияющий на группировку сбоев в Tracer.

Группировка осуществляется по принципу:

crashId-группы-событий/id-конкретного-события-внутри-группы

Расчёт crashId может немного различаться в зависимости от платформы, однако глобально на этот процесс влияют title и subtitle крэша – они берутся из имени ошибки или высчитываются из стектрейса. В случае с нефатальными ошибками в расчётах учитывается issueKey – при наличии именно по этому параметру будет производиться группировка. Номер строки и название файла не влияют на расчёты, поэтому можете быть уверены, что при изменениях в файле crashId сбоя не изменится.

Расчёт crashId происходит после применения маппингов, а значит один и тот же сбой в символизированном и в десимволизированном виде получит разные crashId и попадёт в разные группы.