应用通过HockeyApp更新应用程序启动后崩溃时
问题描述:
这里的CrashReporter始终信息:应用通过HockeyApp更新应用程序启动后崩溃时
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
如果我删除应用程序,然后从头它工作正常下载更新的版本...
答
这导致通过抛出一个Objective-C异常,被runloop捕获并重新抛出,导致回溯失败。
要调试这一点没有变化PLCrashReporter/HockeyApp,你可以通过NSSetUncaughtExceptionHandler()注册自己的异常处理程序,并记录通过所提供的堆栈跟踪(见[ - NSException callStackReturnAddresses])。您需要手动对结果进行符号化。
作为这类错误的更一般的解决方案,您可以通过使用PLCrashReporter trunk来获得原始异常回溯,这将在崩溃报告中单独记录异常的原始回溯。
但是,HockeyApp客户端需要进行最低限度的修改以支持记录额外的堆栈跟踪。可以使用PLCrashReporter附带的文本格式器作为示例 - 它将格式化此附加堆栈跟踪as an additional named pseudo-thread。