Как разобраться в отчете о сбое ios с устройства, подключенного к Xcode?

#ios #swift #symbolicate

#iOS #swift #обозначение

Вопрос:

У меня есть производственное приложение, которое прошло проверку, но сбой в работе. Я подключил устройство к Xcode, повторил сбой и извлек журнал сбоев из из Xcode. Проблема в том, что я не понимаю отчет. Для меня это не имеет смысла. Например, он не сообщает мне, в какой строке моего кода происходит сбой моего приложения. Мой вопрос в том, является ли это примером отчета о сбое без символов? Я не знаю, как выглядит отчет с обозначениями и без обозначений, прежде чем я даже подумаю о том, как обозначить отчет о сбое….

согласно документации Apple (Apple Docuemtnation, раздел Введение), поскольку я извлек отчет о сбое из xcode, он должен быть автоматически обозначен символом через несколько секунд??? Если этот отчет обозначен символом, для меня это не имеет смысла. совершенно бесполезно.

  Incident Identifier: 8CAEC9EB-016F-42DC-AEB7-DE0EC136F33A
 CrashReporter Key:   26676d619a8d0376d5040dfe66f618918964f4d4
 Hardware Model:      iPhone7,1
 Process:             mapdocuments [427]
 Path:                
 /private/var/containers/Bundle/Application/AFB5062A-C2A8-4106- 8A28-5B0528918E2D/mapdocuments.app/mapdocuments
 Identifier:          com.xxxxx.mapdocuments
 Version:             13 (1)
 AppStoreTools:       10B63
 AppVariant:          1:iPhone7,1:12
 Code Type:           ARM-64 (Native)
 Role:                Non UI
 Parent Process:      launchd [1]
 Coalition:           com.xxxxx.mapdocuments [513]


 Date/Time:           2019-03-28 01:52:16.3749  0000
 Launch Time:         2019-03-28 01:51:08.0437  0000
 OS Version:          iPhone OS 12.1.4 (16D57)
 Baseband Version:    7.32.00
 Report Version:      104

 Exception Type:  EXC_CRASH (SIGABRT)
 Exception Codes: 0x0000000000000000, 0x0000000000000000
 Exception Note:  EXC_CORPSE_NOTIFY
 Triggered by Thread:  0

 Application Specific Information:
 abort() called

Last Exception Backtrace:
 0   CoreFoundation                 0x1a4531ea4 
 __exceptionPreprocess   228
 1   libobjc.A.dylib                0x1a3701a50 
objc_exception_throw   55
 2   CoreFoundation                 0x1a4438484  [NSException 
 raise:format:]   115
 3   StoreKit                       0x1b860fc14 -[SKPaymentQueue 
 addPayment:]   675
 4   mapdocuments                   0x100e5c1e8 0x100dfc000   
 393704
 5   mapdocuments                   0x100e65ddc 0x100dfc000   
 433628
 6   UIKitCore                      0x1d16d2314 -[UIApplication 
 sendAction:to:from:forEvent:]   95
 7   UIKitCore                      0x1d115fd54 -[UIControl 
 sendAction:to:forEvent:]   79
 8   UIKitCore                      0x1d1160074 -[UIControl 
 _sendActionsForEvents:withEvent:]   439
 9   UIKitCore                      0x1d115f074 -[UIControl 
 touchesEnded:withEvent:]   567
 10  UIKitCore                      0x1d170ba6c -[UIWindow 
 _sendTouchesForEvent:]   2471
 11  UIKitCore                      0x1d170ccd0 -[UIWindow 
 sendEvent:]   3155
 12  UIKitCore                      0x1d16ebfcc -[UIApplication 
 sendEvent:]   339
 13  UIKitCore                      0x1d17bae38 
 __dispatchPreprocessedEventFromEventQueue   1619
 14  UIKitCore                      0x1d17bd830 
 __handleEventQueueInternal   4739
 15  UIKitCore                      0x1d17b6320 
 __handleHIDEventFetcherDrain   151
 16  CoreFoundation                 0x1a44c20e0 
 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__   23
 17  CoreFoundation                 0x1a44c2060 
 __CFRunLoopDoSource0   87
 18  CoreFoundation                 0x1a44c1944 
 __CFRunLoopDoSources0   175
 19  CoreFoundation                 0x1a44bc810 __CFRunLoopRun   
 1039
 20  CoreFoundation                 0x1a44bc0e0 
 CFRunLoopRunSpecific   435
 21  GraphicsServices               0x1a6735584 GSEventRunModal   
 99
 22  UIKitCore                      0x1d16d0c00 UIApplicationMain   
 211
 23  mapdocuments                   0x100e02884 0x100dfc000   26756
 24  libdyld.dylib                  0x1a3f7abb4 start   3


 Thread 0 name:  Dispatch queue: com.apple.main-thread
 Thread 0 Crashed:
 0   libsystem_kernel.dylib         0x00000001a40c7104 
 __pthread_kill   8
 1   libsystem_pthread.dylib        0x00000001a4143020 
 pthread_kill$VARIANT$mp   380
 2   libsystem_c.dylib              0x00000001a401ed78 abort   140
 3   libc  abi.dylib                0x00000001a36e8f78 
 __cxa_bad_cast   0
 4   libc  abi.dylib                0x00000001a36e9120 
 default_unexpected_handler  8480 ()   0
 5   libobjc.A.dylib                0x00000001a3701e58 
 _objc_terminate  28248 ()   124
 6   libc  abi.dylib                0x00000001a36f50fc 
 std::__terminate(void (*)  57596 ())   16
 7   libc  abi.dylib                0x00000001a36f4cec _ 
 _cxa_rethrow   144
 8   libobjc.A.dylib                0x00000001a3701c20 
 objc_exception_rethrow   44
 9   CoreFoundation                 0x00000001a44bc14c 
 CFRunLoopRunSpecific   544
 10  GraphicsServices               0x00000001a6735584 
 GSEventRunModal   100
  11  UIKitCore                         0x00000001d16d0c00 
 UIApplicationMain   212
 12  mapdocuments                   0x0000000100e02884 0x100dfc000 
   26756
 13  libdyld.dylib                  0x00000001a3f7abb4 start   4
  

как показано в Xode:

Комментарии:

1. Вам нужно удалить символы из журнала сбоев, чтобы найти точное название класса или выполнить поиск SKPaymentQueue addPayment Может быть, вы что-то там найдете

Ответ №1:

Да, это несимволированный журнал сбоев. Проблема в том, что вызов [-SKPaymentQueue addPayment:] передал неверный указатель для платежа. Вот что сообщает вам журнал:

Тип исключения: EXC_CRASH (SIGABRT)

и

Информация о конкретном приложении:

вызывается функция abort ()

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

Обратная трассировка показывает, какие функции были вызваны, чтобы перейти к прерыванию:

 Last Exception Backtrace:
 0   CoreFoundation                 0x1a4531ea4 __exceptionPreprocess   228
 1   libobjc.A.dylib                0x1a3701a50 objc_exception_throw   55
 2   CoreFoundation                 0x1a4438484  [NSException raise:format:]   115
 3   StoreKit                       0x1b860fc14 -[SKPaymentQueue addPayment:]   675
 4   mapdocuments                   0x100e5c1e8 0x100dfc000   393704
 5   mapdocuments                   0x100e65ddc 0x100dfc000   433628
  

Они выполняются в порядке, обратном вызову. Итак, некоторый код в mapdocuments приложении или библиотеке вызывается в StoreKit фреймворк, в частности -[SKPaymentQueue addPayment:] метод. Этот метод обнаружил, что переданное значение недопустимо, и вызвал исключение. Исключение не было перехвачено с использованием блока @try / @catch , поэтому ОС прервала выполнение.

К сожалению, поскольку символы не были предоставлены, мы не знаем точную строку, которая вызывалась -addPayment: с неверными данными. Однако, если вы создали приложение, у вас должны быть символы для него, и я думаю, что с их помощью можно обозначить журнал сбоев. Однако я не делал этого сам.