Как я могу узнать, почему мое приложение получает SIGKILLed внутри UIPasteboard? - PullRequest
11 голосов
/ 29 ноября 2011

Очень редко наше приложение падает, потому что оно получает SIGKILL. Обстоятельства разные, но обратный след всегда один и тот же:

#0  0x94a00afa in mach_msg_trap ()
#1  0x94a01267 in mach_msg ()
#2  0x00fa9d5c in _UIPasteboardServerContainsTypesAtIndex ()
#3  0x00faa9ae in UIPasteboardServerContainsTypesAtIndex ()
#4  0x00fa5417 in -[UIPasteboard containsPasteboardTypes:] ()
#5  0x00de4054 in -[UITextField canPerformAction:withSender:] ()
#6  0x087038a8 in -[UIResponder(UITextAccessibilityUtilities) _accessibilityHasTextOperations] ()
#7  0x08704df5 in -[UIAccessibilityTextFieldElement _accessibilityHasTextOperations] ()
#8  0x08791dcf in -[NSObject(AXPrivCategory) accessibilityAttributeValue:] ()
#9  0x0878a3b4 in _copyMultipleAttributeValuesCallback ()
#10 0x087c5c95 in _AXXMIGCopyMultipleAttributeValues ()
#11 0x087c0a6c in _XCopyMultipleAttributeValues ()
#12 0x087c8e66 in mshMIGPerform ()
#13 0x020cf1c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#14 0x02034022 in __CFRunLoopDoSource1 ()
#15 0x0203290a in __CFRunLoopRun ()
#16 0x02031db4 in CFRunLoopRunSpecific ()
#17 0x02031ccb in CFRunLoopRunInMode ()
#18 0x02a43879 in GSEventRunModal ()
#19 0x02a4393e in GSEventRun ()
#20 0x00d2ba9b in UIApplicationMain ()
#21 0x0000284d in main (argc=1, argv=0xbfffed44) at [myapp]/main.m:14
#22 0x000027c5 in start ()

Как бы я узнал, что является причиной этого сбоя?

1 Ответ

1 голос
/ 09 декабря 2012

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

Так как это происходит в коде Apple, скорее всего, это ошибка в iOS, потому что метод containsPasteboardTypes: никогда не должен вызывать исключение.Возможно, только если переданный параметр равен nil, но тогда ошибка будет в UIAccessibilityTextFieldElement, который тоже является обязанностью Apple.В качестве обходного пути вы можете добавить блок @try вокруг ошибочной операции.Это будет ловить и игнорировать исключение.

...