2012-05-13 1 views
1

MyApplication создает персонализированный отчет о сбое с использованием экземпляра NSException. Приложение извлекает массив callStackSymbols и добавляет их в текстовый файл.символизация с atos

Если вы заметили в отчете о аварии, вместо того, чтобы получить строку:

libsqlite3.dylib 0x30531ce4 0x30506000 + 179428

Я получаю строку как этот

29 MyApplication 0x00059260 MyApplication + 4704

Похоже, вместо того, чтобы получать 2 адреса, я получаю «MyApplication» посередине. Atos не работает с первым адресом.

enter image description here

ответ

2

Вы получаете symbolicated результаты, так как ваше приложение двоичная содержит символы отладки, поэтому вызов callStackSymbols может разрешить адреса сразу. Единственной недостающей частью являются номера строк, которые невозможно получить автоматически, когда символы являются частью приложения.

Три значения: Address = Base Address + Offset. Это означает, что первого адреса достаточно, чтобы получить символ. Базовый адрес является начальным адресом двоичного/фреймворка. В основном, когда символика делается, первый адрес также изменяется, чтобы быть относительно адреса структуры, а не быть абсолютным. Бинарная область памяти приложения обычно начинается с 0x1000. Это можно просмотреть в разделе двоичных изображений отчетов об авариях, и оно может отличаться от 0x1000 из-за новых возможностей памяти в новых версиях iOS.

Так что теперь просто используйте адрес выдачи в третьем столбце и добавьте 0x1000 к значению при вызове atos.

В целом я предлагаю использовать фреймворк на основе PLCrashReporter, который предоставит вам всю информацию для отчета о сбоях. Включая все потоки и двоичные изображения в стандартный формат отчета о сбоях, а также работает в App Store.