Сбой CoreBluetooth при записи значения (после нескольких тысяч сообщений)IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Сбой CoreBluetooth при записи значения (после нескольких тысяч сообщений)

Сообщение Anonymous »

Я разрабатываю приложение для связи с принадлежащим мне устройством. Для этого требуется постоянный поток данных, для чего я использую цикл записи. Он функционирует путем записи начального сообщения в характеристику BLE, а затем в обратном вызове DidWriteValueFor я вызываю обработчик, который запрашивает последнюю информацию. Проблема в том, что при определенном количестве сообщений (то есть одном и том же каждый раз, если не изменены некоторые тайминги) на iOS обычно поступает около 2000 сообщений, но на MacOS это происходит до тех пор, пока около 10 000 сообщений, прежде чем такое поведение будет наблюдаться, мое приложение аварийно завершает работу с EXC_BAD_ACCESS (code=2, адрес=0x16d4afff8) ВНУТРИ функции writeValue характеристики. Такое поведение является последовательным и происходит каждый раз. Эта проблема наблюдалась во многих версиях iOS и macOS (я не прикасался к проекту в течение 7 месяцев, и, несмотря на обновление всех моих устройств, проблема все еще существует).
У меня есть попробовал поместить CBCentralManager в отдельную очередь отправки отдельно от основного потока и вызвать все, что связано с Bluetooth, с помощью bluetoothDispatchQueue.async {... . Я попытался значительно замедлить работу программы, оставив ее на таймере 0,25 секунды вместо использования обратного вызова DidWriteValueFor, который изменил количество сообщений, необходимых для ее сбоя, но в конечном итоге она все равно аварийно завершилась. Я позаботился о том, чтобы нигде не было утечек памяти, использование памяти остается постоянным на протяжении всей жизни приложения. Я убедился, что в сообщении, которое я пишу, действительно есть данные, прежде чем оно будет написано. Я убедился, что периферийное устройство все еще находится в подключенном состоянии прямо перед writeValue и что CBCentralManager все еще включен в рабочее состояние. Я пробовал писать как с ответом, так и без ответа. Я проверил PacketLogger на предмет возможных ошибок BLE, но буквально ничего не происходит до и после сбоя приложения. Я проверил журналы устройств, и нет абсолютно ничего, что указывало бы на то, что что-то происходит с BLE. Это просто нарушение доступа к памяти, о котором я упоминал ранее ВНУТРИ самого CoreBluetooth, и никакие изменения, которые я делаю, не позволяют избежать этого. Вот где происходит сбой приложения (где есть стрелка):
CoreBluetooth`-[CBPeripheral writeValue:forCharacteristic:type:]:
0x1c810ea0c : pacibsp
0x1c810ea10 : sub sp, sp, #0x90
0x1c810ea14 : stp x26, x25, [sp, #0x40]
0x1c810ea18 : stp x24, x23, [sp, #0x50]
0x1c810ea1c : stp x22, x21, [sp, #0x60]
0x1c810ea20 : stp x20, x19, [sp, #0x70]
0x1c810ea24 : stp x29, x30, [sp, #0x80]
0x1c810ea28 : add x29, sp, #0x80
0x1c810ea2c : mov x22, x4
0x1c810ea30 : mov x21, x3
0x1c810ea34 : mov x23, x1
0x1c810ea38 : mov x20, x0
0x1c810ea3c : bl 0x1c84f69f0
0x1c810ea40 : mov x19, x0
0x1c810ea44 : bl 0x1c84f6a10
0x1c810ea48 : mov x21, x0
0x1c810ea4c : cbz x19, 0x1c810ec04 ;
0x1c810ea50 : cbz x21, 0x1c810ec4c ;
0x1c810ea54 : mov x0, x21
0x1c810ea58 : bl 0x1c8192280 ; objc_msgSend$peripheral
0x1c810ea5c : bl 0x1c84f67b0
0x1c810ea60 : mov x23, x0
0x1c810ea64 : bl 0x1c84f6900
0x1c810ea68 : cmp x23, x20
0x1c810ea6c : b.eq 0x1c810eab4 ;
0x1c810ea70 : adrp x8, 247140
0x1c810ea74 : add x8, x8, #0x4d0 ; CBLogInitOnce
0x1c810ea78 : ldr x8, [x8]
0x1c810ea7c : cmn x8, #0x1
0x1c810ea80 : b.ne 0x1c810ec94 ;
0x1c810ea84 : adrp x8, 247140
0x1c810ea88 : add x8, x8, #0x4c8 ; CBLogComponent
0x1c810ea8c : ldr x23, [x8]
0x1c810ea90 : mov x0, x23
0x1c810ea94 : mov w1, #0x10
0x1c810ea98 : bl 0x1c84f6bc0
0x1c810ea9c : cbz w0, 0x1c810eb9c ;
0x1c810eaa0 : mov x0, x21
0x1c810eaa4 : mov x1, x20
0x1c810eaa8 : mov x2, x23
0x1c810eaac : bl 0x1c8155854 ; -[CBPeripheral writeValue:forCharacteristic:type:].cold.2
0x1c810eab0 : b 0x1c810eb9c ;
0x1c810eab4 : cmp x22, #0x1
0x1c810eab8 : b.ne 0x1c810eaf8 ;
0x1c810eabc : mov x0, x21
0x1c810eac0 : bl 0x1c81927c0 ; objc_msgSend$properties
0x1c810eac4 : tbnz w0, #0x2, 0x1c810eaf8 ;
0x1c810eac8 : adrp x8, 247140
0x1c810eacc : add x8, x8, #0x4d0 ; CBLogInitOnce
0x1c810ead0 : ldr x8, [x8]
0x1c810ead4 : cmn x8, #0x1
0x1c810ead8 : b.ne 0x1c810ecb8 ;
0x1c810eadc : adrp x8, 247140
0x1c810eae0 : add x8, x8, #0x4c8 ; CBLogComponent
0x1c810eae4 : ldr x23, [x8]
0x1c810eae8 : mov x0, x23
0x1c810eaec : mov w1, #0x10
0x1c810eaf0 : bl 0x1c84f6bc0
0x1c810eaf4 : cbnz w0, 0x1c810ebf4 ;
0x1c810eaf8 : adrp x8, 282389
0x1c810eafc : ldr x24, [x8, #0xc88]
0x1c810eb00 : mov x0, x21
0x1c810eb04 : bl 0x1c8190240 ; objc_msgSend$handle
0x1c810eb08 : bl 0x1c84f67b0
0x1c810eb0c : mov x23, x0
0x1c810eb10 : mov x0, x21
0x1c810eb14 : bl 0x1c8194dc0 ; objc_msgSend$valueHandle
0x1c810eb18 : bl 0x1c84f67b0
0x1c810eb1c : mov x25, x0
0x1c810eb20 : adrp x8, 282389
0x1c810eb24 : ldr x0, [x8, #0xc80]
0x1c810eb28 : mov x2, x22
0x1c810eb2c : bl 0x1c8191dc0 ; objc_msgSend$numberWithInteger:
0x1c810eb30 : bl 0x1c84f67b0
0x1c810eb34 : mov x26, x0
0x1c810eb38 : adrp x8, 282392
0x1c810eb3c : add x8, x8, #0x2a8 ; @"kCBMsgArgType"
0x1c810eb40 : stp x8, xzr, [sp, #0x30]
0x1c810eb44 : adrp x8, 282391
0x1c810eb48 : add x8, x8, #0xa08 ; @"kCBMsgArgData"
0x1c810eb4c : stp x8, x0, [sp, #0x20]
0x1c810eb50 : adrp x8, 282391
0x1c810eb54 : add x8, x8, #0x9e8 ; @"kCBMsgArgCharacteristicValueHandle"
0x1c810eb58 : stp x8, x19, [sp, #0x10]
0x1c810eb5c : adrp x8, 282391
0x1c810eb60 : add x8, x8, #0x9c8 ; @"kCBMsgArgCharacteristicHandle"
0x1c810eb64 : stp x8, x25, [sp]
0x1c810eb68 : mov x0, x24
0x1c810eb6c : mov x2, x23
0x1c810eb70 : bl 0x1c818f9a0 ; objc_msgSend$dictionaryWithObjectsAndKeys:
0x1c810eb74 : bl 0x1c84f67b0
0x1c810eb78 : mov x24, x0
0x1c810eb7c : mov x0, x20
0x1c810eb80 : mov w2, #0xb9
0x1c810eb84 : mov x3, x24
0x1c810eb88 : bl 0x1c8192f80 ; objc_msgSend$sendMsg:args:
-> 0x1c810eb8c : bl 0x1c84f6910
0x1c810eb90 : bl 0x1c84f6930
0x1c810eb94 : bl 0x1c84f6920
0x1c810eb98 : bl 0x1c84f6900
0x1c810eb9c : cmp x22, #0x1
0x1c810eba0 : b.ne 0x1c810ebd0 ;
0x1c810eba4 : mov x0, x20
0x1c810eba8 : bl 0x1c8194ee0 ; objc_msgSend$writesPending
0x1c810ebac : add w2, w0, #0x1
0x1c810ebb0 : mov x0, x20
0x1c810ebb4 : bl 0x1c81946c0 ; objc_msgSend$setWritesPending:
0x1c810ebb8 : mov x0, x20
0x1c810ebbc : bl 0x1c8194ee0 ; objc_msgSend$writesPending
0x1c810ebc0 : cmp w0, #0x0
0x1c810ebc4 : cset w2, eq
0x1c810ebc8 : mov x0, x20
0x1c810ebcc : bl 0x1c8193400 ; objc_msgSend$setCanSendWriteWithoutResponse:
0x1c810ebd0 : bl 0x1c84f68e0
0x1c810ebd4 : bl 0x1c84f68b0
0x1c810ebd8 : ldp x29, x30, [sp, #0x80]
0x1c810ebdc : ldp x20, x19, [sp, #0x70]
0x1c810ebe0 : ldp x22, x21, [sp, #0x60]
0x1c810ebe4 : ldp x24, x23, [sp, #0x50]
0x1c810ebe8 : ldp x26, x25, [sp, #0x40]
0x1c810ebec : add sp, sp, #0x90
0x1c810ebf0 : retab
0x1c810ebf4 : mov x0, x21
0x1c810ebf8 : mov x1, x23
0x1c810ebfc : bl 0x1c81557f8 ; -[CBPeripheral writeValue:forCharacteristic:type:].cold.1
0x1c810ec00 : b 0x1c810eaf8 ;
0x1c810ec04 : adrp x8, 282389
0x1c810ec08 : ldr x0, [x8, #0xc90]
0x1c810ec0c : bl 0x1c818f5a0 ; objc_msgSend$currentHandler
0x1c810ec10 : bl 0x1c84f67b0
0x1c810ec14 : mov x24, x0
0x1c810ec18 : adrp x8, 282392
0x1c810ec1c : add x8, x8, #0x868 ; @"data != nil"
0x1c810ec20 : str x8, [sp]
0x1c810ec24 : adrp x4, 282392
0x1c810ec28 : add x4, x4, #0x7c8 ; @"CBPeripheral.m"
0x1c810ec2c : adrp x6, 282390
0x1c810ec30 : add x6, x6, #0xce8 ; @"Invalid parameter not satisfying: %@"
0x1c810ec34 : mov x2, x23
0x1c810ec38 : mov x3, x20
0x1c810ec3c : mov w5, #0x1eb
0x1c810ec40 : bl 0x1c8190420 ; objc_msgSend$handleFailureInMethod:object:file:lineNumber:description:
0x1c810ec44 : bl 0x1c84f6910
0x1c810ec48 : cbnz x21, 0x1c810ea54 ;
0x1c810ec4c : adrp x8, 282389
0x1c810ec50 : ldr x0, [x8, #0xc90]
0x1c810ec54 : bl 0x1c818f5a0 ; objc_msgSend$currentHandler
0x1c810ec58 : bl 0x1c84f67b0
0x1c810ec5c : mov x24, x0
0x1c810ec60 : adrp x8, 282392
0x1c810ec64 : add x8, x8, #0x848 ; @"characteristic != nil"
0x1c810ec68 : str x8, [sp]
0x1c810ec6c : adrp x4, 282392
0x1c810ec70 : add x4, x4, #0x7c8 ; @"CBPeripheral.m"
0x1c810ec74 : adrp x6, 282390
0x1c810ec78 : add x6, x6, #0xce8 ; @"Invalid parameter not satisfying: %@"
0x1c810ec7c : mov x2, x23
0x1c810ec80 : mov x3, x20
0x1c810ec84 : mov w5, #0x1ec
0x1c810ec88 : bl 0x1c8190420 ; objc_msgSend$handleFailureInMethod:object:file:lineNumber:description:
0x1c810ec8c : bl 0x1c84f6910
0x1c810ec90 : b 0x1c810ea54 ;
0x1c810ec94 : adrp x0, 247140
0x1c810ec98 : add x0, x0, #0x4d0 ; CBLogInitOnce
0x1c810ec9c : adrp x16, -17
0x1c810eca0 : add x16, x16, #0x6d4 ; CBLogInit
0x1c810eca4 : paciza x16
0x1c810eca8 : mov x2, x16
0x1c810ecac : mov x1, #0x0
0x1c810ecb0 : bl 0x1c8158380 ; symbol stub for: dispatch_once_f
0x1c810ecb4 : b 0x1c810ea84 ;
0x1c810ecb8 : adrp x0, 247140
0x1c810ecbc : add x0, x0, #0x4d0 ; CBLogInitOnce
0x1c810ecc0 : adrp x16, -17
0x1c810ecc4 : add x16, x16, #0x6d4 ; CBLogInit
0x1c810ecc8 : paciza x16
0x1c810eccc : mov x2, x16
0x1c810ecd0 : mov x1, #0x0
0x1c810ecd4 : bl 0x1c8158380 ; symbol stub for: dispatch_once_f
0x1c810ecd8 : b 0x1c810eadc ;


Подробнее здесь: https://stackoverflow.com/questions/787 ... d-messages
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обработка нескольких тысяч сообщений с помощью одного отправителя служебной шины
    Гость » » в форуме C#
    0 Ответы
    43 Просмотры
    Последнее сообщение Гость
  • Обработка нескольких тысяч сообщений с помощью одного отправителя служебной шины
    Гость » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Гость
  • IOS CoreBluetooth - ничего не происходит при написании характерного для принтера с Zebra Label
    Anonymous » » в форуме IOS
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • IOS — CoreBluetooth | Символ не найден — CBConnectPeripheralOptionEnableAutoReconnect
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как подключиться к устройству BLE без ввода пользователя с помощью Swiftui и CoreBluetooth?
    Anonymous » » в форуме IOS
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»