Символические отчеты о сбоях приложений iPhone - PullRequest
426 голосов
/ 22 сентября 2009

Я пытаюсь символизировать отчеты о сбоях моего приложения для iPhone.

Я получил отчеты о сбоях из iTunes Connect. У меня есть двоичный файл приложения, который я отправил в App Store, и у меня есть файл dSYM, который был сгенерирован как часть сборки.

У меня есть все эти файлы в одном каталоге, который индексируется с помощью spotlight.

Что теперь?

Я пытался вызвать:

symbolicatecrash crashreport.crash myApp.app.dSYM

и он просто выводит тот же текст, который находится в отчете о сбое, с которого он начинается, а не символически.

Я что-то не так делаю?

Ответы [ 25 ]

8 голосов
/ 27 января 2012

В XCode 4.2.1 откройте Organizer, затем перейдите в раздел «Журналы библиотеки / устройства» и перетащите файл .crash в список журналов аварий. Это будет символизировано для вас через несколько секунд. Обратите внимание, что вы должны использовать тот же экземпляр XCode, на котором была заархивирована исходная сборка (то есть архив вашей сборки должен существовать в Организаторе).

7 голосов
/ 12 октября 2010

Magical XCode Organizer не так уж и волшебно символизирует мое приложение. Я не получил никаких символов для сообщений о сбоях, которые я получил от Apple после неудачной отправки приложения.

Я попытался использовать командную строку, поместив отчет о сбое в ту же папку, что и файл .app (который я отправил в хранилище) и файл .dSYM:

$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"

Это предоставляло только символы для моего приложения, а не основной базовый код, но это было лучше, чем дамп номера, который мне дает Организатор, и мне было достаточно, чтобы найти и исправить сбой, который имел мое приложение. Если кто-нибудь знает, как расширить это, чтобы получить символы Foundation, это будет оценено.

6 голосов
/ 05 апреля 2011

В моем случае я перетаскивал отчеты о сбоях прямо из Почты в Организатор. По какой-то причине это не позволило символизировать сообщения о сбоях (хотелось бы знать, почему).

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

Очень специфический случай, я знаю. Но думал, что поделюсь на всякий случай.

4 голосов
/ 11 января 2012

Для тех, кто использует Airbrake, выше солидный ответ, но он не сработает без настройки:

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

  • Создать новый каталог на рабочем столе или где-либо еще
  • Найти нужный архив в органайзере Xcode
  • Дважды нажмите, чтобы открыть в видоискателе
  • Дважды нажмите, чтобы показать содержимое пакета
  • Скопируйте файл .dSYM и файл .app в новый каталог
  • CD в новый каталог
  • Запустите эту команду: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo'
  • Терминал войдет в интерактивный ход
  • Вставьте адрес памяти и нажмите Enter, он выведет имя метода и номер строки
  • Либо введите следующую команду: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo' Получить информацию только по одному адресу
4 голосов
/ 07 марта 2011

Вот еще одна проблема, которую я имею с symbolicatecrash - она ​​не будет работать с приложениями, в которых есть пробелы (например, «Test App.app»). Примечание. Я не думаю, что вы можете указывать пробелы в их имени при отправке, так что вам все равно следует их удалить, но если у вас уже есть сбои, требующие анализа, исправьте символическую ошибку (4.3 GM) следующим образом:

240c240
<         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\"";
---
>         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\"";
251c251
<             my $cmd = "find \"$archive_path/Products\" -name $exec_name.app";
---
>             my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\"";
4 голосов
/ 02 ноября 2012

Комбинация, которая работала для меня, была:

  1. Скопируйте файл dSYM в каталог, в котором отчет о сбое был
  2. Распакуйте файл ipa, содержащий приложение ('unzip MyApp.ipa')
  3. Скопируйте двоичный файл приложения из полученной разнесенной полезной нагрузки в ту же папку, что и отчет о сбое и файл символов (что-то вроде «MyApp.app/MyApp")
  4. Импорт или повторная символизация отчета о сбое из органайзера XCode

Использование atos Мне не удалось разрешить правильную информацию о символах с помощью адресов и смещений, которые были в отчете о сбое. Когда я это сделал, я вижу что-то более значимое, и это похоже на законный след стека.

3 голосов
/ 26 января 2010

Мне пришлось много взломать скрипт symbolicatecrash, чтобы заставить его работать правильно.

Насколько я могу судить, symbolicatecrash сейчас требует, чтобы .app находился в том же каталоге, что и .dsym. Он будет использовать .dsym, чтобы найти .app, но не будет использовать dsym, чтобы найти символы.

Вы должны сделать копию своей символической ошибки, прежде чем пытаться использовать эти патчи, которые заставят его выглядеть в dsym:

Вокруг строки 212 в функции getSymbolPathFor_dsymUuid

212     my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);

Вокруг строки 265 в функции matchUUID

265             return 1;
1 голос
/ 07 мая 2017

Я предпочитаю скрипт , который будет символизировать все мои журналы сбоев.

Предварительные условия

Создать папку и поместить туда 4 вещи:

  1. symbolicatecrash скрипт perl - есть много SO-ответов, которые сообщают о его местонахождении

  2. Архив сборки, которая соответствует сбоям (из Xcode Organizer. Просто как Show in Finder и скопируйте) [я не уверен, что это необходимо)

  3. Все пакеты xccrashpoint - (из Xcode Organizer. Show in Finder, вы можете скопировать все пакеты вкаталог или отдельная точка xccrash, которую вы хотели бы обозначить символом)

  4. Добавьте этот краткий скрипт в каталог:

    #!/bin/sh
    
    echo "cleaning old crashes from directory"
    rm -P *.crash
    rm -P *.xccrashpoint
    rm -r allCrashes
    echo "removed!"
    echo ""
    echo "--- START ---"
    echo ""
    
    mkdir allCrashes
    mkdir symboledCrashes
    find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \;
    
    cd allCrashes
    for crash in *.crash; do
        ../symbolicatecrash $crash > ../symboledCrashes/V$crash
    done
    cd ..
    
    echo ""
    echo "--- DONE ---"
    echo ""
    

The Script

Когда вы запустите сценарий, вы получите 2 каталога.

  1. allCrashes - все сбои всех xccrashpoint будут там.

  2. symboledCrashes - то же самое происходит сбой, но теперь со всеми символами.

  3. Вам не нужно очищать каталог от старогопадает перед запуском скрипта.это очистит автоматически.удачи!

1 голос
/ 15 февраля 2017

Это просто, после многочасового поиска я нашел четкие шаги для обозначения всего файла журнала сбоев.

  • копирование файлов .app, crash_report и DSYM в папку.
  • подключить устройство с xcode
  • Затем перейдите в окно -> выбрать устройства -> просмотреть журналы устройства
  • Затем выберите это устройство, удалите все журналы.
  • перетащите ваш сбой в раздел журнала устройства. это будет автоматически символизировать аварию. просто щелкните правой кнопкой мыши отчет и экспортируйте его.

счастливое кодирование,
Рияз

0 голосов
/ 10 июня 2016

Мне нравится использовать Textwrangler, чтобы точно определять ошибки в исходном приложении, загружающем двоичное отклонение. (Данные о сбое будут найдены в вашей учетной записи itunesConnect.) Используя описанный выше метод Sachin, я копирую original.crash в TextWrangler, затем копирую созданный мной файл symbolicatecrash в другой файл TextWrangler. Сравнивая два файла, выявляем различия. Файл symbolicatecrash будет иметь различия, указывающие на количество проблем в файле и строке.

...