Объяснение того, что говорит мне этот след

У меня есть программа, случайно, когда устройство отключается или подключается, я получаю сбой. когда я бегу bt команда в gdb Я получаю следующее:

#0  0x00007fff881cf150 in objc_msgSend_vtable5 ()
#1  0x00007fff8cceabf3 in -[IOBluetoothRFCOMMChannel(IOBluetoothRFCOMMChannelPrivate) processIncomingData:] ()
#2  0x00007fff8cce8ee1 in -[IOBluetoothRFCOMMChannel(IOBluetoothRFCOMMChannelPrivate) handleMachMessage:] ()
#3  0x00007fff8d142ba5 in __NSFireMachPort ()
#4  0x00007fff8ad41e42 in __CFMachPortPerform ()
#5  0x00007fff8ad41cac in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#6  0x00007fff8ad419db in __CFRunLoopDoSource1 ()
#7  0x00007fff8ad78117 in __CFRunLoopRun ()
#8  0x00007fff8ad77676 in CFRunLoopRunSpecific ()
#9  0x00007fff8c88731f in RunCurrentEventLoopInMode ()
#10 0x00007fff8c88e5c9 in ReceiveNextEventCommon ()
#11 0x00007fff8c88e456 in BlockUntilNextEventMatchingListInMode ()
#12 0x00007fff92404f5d in _DPSNextEvent ()
#13 0x00007fff92404861 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#14 0x00007fff9240119d in -[NSApplication run] ()
#15 0x00007fff9267fb88 in NSApplicationMain ()
#16 0x00000001000020d2 in main (argc=3, argv=0x7fff5fbff8e0) at main.m:13

XCode ломается на NSApplicationMain, а не где-нибудь в моем коде, и я сказал, чтобы он ломался на все исключения. Это заставляет меня думать, что это происходит внутри самого стека Bluetooth. Это правильно? Есть ли способ, которым я могу предотвратить это, или, по крайней мере, попытаться / поймать это, чтобы очистить вещи и предотвратить сбой?

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам