2014-11-09 3 views
1

Я попытался найти имя метода из .crash-файла, используя служебную программу командной строки atos, но получая неправильные имена методов. Пример: аварийный журнал говорит, что исключение связано с отправкой сообщения в незарегистрированный селектор UIComponent, отправленный в интенсивный режим, но после символа «atos», показывающего метод в сетевом классе.Символизирующий файл iOS .crash

Как предложено здесь iOS crash reports: atos not working as expected попробовал взглянуть на «Слайд & LoadAddress», в моем случае оба они одинаковы (Слайд: 0x4000 LoadAdress: 0x4000).

И также я проверил файл .iPA, который я использую, является правильным, как предлагается здесь: https://developer.apple.com/library/mac/qa/qa1765/_index.html.

Я не уверен, что происходит не так. Может ли кто-нибудь столкнуться с тем же вопросом? Пожалуйста, предложите любые другие подходы.

У меня есть файл .iPA и .crash файл, вам нужно найти правильные имена методов.

Вот полный отчет о сбое:

http://www.filedropper.com/symbolicate

Команда, чтобы узнать .ipa является правильным:

dwarfdump --uuid Example.app/Example 

Command, чтобы узнать имя метода:

atos -arch armv7 -o Example.app/Example -l 0x4000 0x7f68bb0 0x3017d000 + 84904 

, который дает метод в сетевом классе, где у меня нет UIComponent.

Пожалуйста, дайте мне знать, если вам нужно больше деталей.

Thanks Shiva.

+0

Пожалуйста, добавьте более подробную информацию, в частности: 1. Полный (!!) отчет о сбое, 2. Точные вызовы с результатом вызовов. – Kerni

+0

Привет, Керни, Спасибо за ответ. Добавили подробности на вопрос, пожалуйста, дайте мне знать, если вам нужны дальнейшие подробности. –

+1

Я попросил полный отчет о сбоях, а не только его часть! – Kerni

ответ

1

Есть несколько вещей:

  1. Катастрофа вызывается исключение и отчет о сбое не показывает требуемую Last Exception Backtrace.
  2. Symbolicating основной поток будет только показать вам main.m вызов в кадре 12 и неперехваченное обработчик исключений в кадре 2 нити 0
  3. Отчет аварии написана на старой версии PLCrashReporter (определяется двумя [TODO] текстов сверху), или вы используете другой сервер для исключений uncaught. Как есть, отчет о сбое вам не поможет.
  4. Вы должны использовать atos с приложениями dSYM вместо бинарного приложения. Использование двоичного файла приложения никогда не покажет вам имена файлов или номера строк и покажет только имя и методы класса, если вы не удаляете символы из исполняемого файла. Но вы должны удалить их из исполняемого файла, чтобы сохранить размер двоичного файла как можно ниже (экономит 30-50%).
  5. То, как вы звоните atos, неверно. 0x7f68bb0 0x3017d000 + 84904 не является допустимым вариантом, и на самом деле ваш отчет о сбое даже не содержит этого. Вместо этого вам нужно использовать только первый адрес после двоичного имени для каждого кадра.Так что для следующей строки:

    2 Example        0x001ffe3b 0x4000 + 2080315 
    

    Вы бы использовать Atos следующим образом:

    `atos -arch -armv7 -l 0x4000 -o Example.app.dSYM 0x001ffe3b` 
    

Вы должны обновить свой крах отчетов SDK использовать последнюю версию PLCrashReporter и убедитесь, что исключения отображаются правильно в отчете.

+0

Большое спасибо за ваше время и подробное объяснение. –

+0

3. Будет обновлен PLCrashReporter. 4. Я не разделял символы во время архивации сборки App Store, смог получить имена классов и методов. Проблема в том, что имена, которые она дала, неверны, как упоминалось в моем вопросе. 5. Адрес - это образцы, а не оригинал, который я использовал во время работы atos. Не могли бы вы сообщить мне, как указать файл .dSYM с .iPA? потому что когда я запускаю atos -arch armv7 -l 0x4000 -o Example.app.dSYM 0x001ffe3b, получение «atos не может загрузить символы для файла Burst.app.dSYM для архитектуры armv7» –

+0

The, dSYM и original .app находятся в вашем Xcode архив, который вы использовали для создания .ipa. Откройте организатор Xcode, чтобы получить его и его путь. – Kerni