Приложение вылетает при запуске после обновления приложения через HockeyApp

Вот информация CrashReporter:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x347c2848 __kill + 8
1   [My Application]                0x0002ec44 fatal_signal_handler (PLCrashSignalHandler.m:98)
2   libsystem_c.dylib               0x37518522 _sigtramp + 42
3   [My Application]                0x0003040a uncaught_exception_handler (PLCrashReporter.m:136)
4   CoreFoundation                  0x37663984 __handleUncaughtException + 68
5   libobjc.A.dylib                 0x334082ca _objc_terminate + 122
6   libc++abi.dylib                 0x37f473be safe_handler_caller(void (*)()) + 70
7   libc++abi.dylib                 0x37f4744a std::terminate() + 14
8   libc++abi.dylib                 0x37f4881e __cxa_rethrow + 82
9   libobjc.A.dylib                 0x3340822e objc_exception_rethrow + 6
10  CoreFoundation                  0x375b9556 CFRunLoopRunSpecific + 398
11  CoreFoundation                  0x375b93b6 CFRunLoopRunInMode + 98
12  UIKit                           0x3354dda4 -[UIApplication _run] + 544
13  UIKit                           0x3354b05a UIApplicationMain + 1074
14  [My Application]                0x00002a9a main (main.m:54)
15  [My Application]                0x00002a58 0x1000 + 6744

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


person wierddemon    schedule 19.09.2011    source источник


Ответы (1)


Это вызвано тем, что исключение Objective-C выбрасывается, перехватывается циклом выполнения и выдается повторно, что приводит к потере обратной трассировки.

Чтобы отладить это без изменений в PLCrashReporter/HockeyApp, вы можете зарегистрировать свой собственный обработчик исключений через NSSetUncaughtExceptionHandler() и зарегистрируйте предоставленную трассировку стека через (см. [-NSException callStackReturnAddresses]). Вам нужно будет символизировать результаты вручную.

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

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

person landonf    schedule 21.09.2011