【问题标题】:CoreBluetooth[ERROR] XPC connection interrupted, resettingCoreBluetooth[ERROR] XPC 连接中断,正在重置
【发布时间】:2013-02-15 10:54:04
【问题描述】:

当我尝试使用我的 iphone 应用程序连接蓝牙 LE 时。它给 CoreBluetooth[ERROR] XPC 连接中断,重置。 为什么会这样?

【问题讨论】:

  • 请添加有关异常的更多详细信息
  • 我在 Mac Mini @ 10.9 上也遇到了这个问题(对于 Mac 应用程序,我使用 <IOBluetooth/IOBluetooth.h> 而不是 <CoreBluetooth/CoreBluetooth.h>,其他一切都是相同)。我注意到如果我同时通过 Wi-fi 传输一些数据,则不会发生此问题。 500 kbit/sec 足以解决这个问题。一旦我停止通过 Wi-fi 传输数据,问题就会再次出现。我怀疑根本原因在于时间问题,即 CoreBluetooth 堆栈中的某些东西发生得比 expeted 更快,因此问题是。
  • 我在运行 10.9 Mavericks(Apple 蓝牙软件版本 4.2.0f6 12982)的 2012 年末 Mac Mini(Broadcom 芯片组:20702B0 固件版本:v78 c8621)上遇到此问题。 CBCentralManager 中断 XPC 连接,然后在连接到外围设备后始终重置自身 500 毫秒。尝试@Sergey 使用 nc 通过 wifi 传输数据的技巧似乎没有帮助。另一方面,我在运行 Mavericks 的旧版 2011 年中 Mac Mini(Broadcom 芯片组:20702A3 固件版本:v131 c5495)上没有遇到这个问题。

标签: iphone core-bluetooth


【解决方案1】:

“CoreBluetooth[ERROR] XPC 连接中断,正在重置”表示blued 蓝牙守护进程已崩溃。您可以通过打开控制台并查看系统日志和诊断报告来查看更多详细信息。

就我而言,blued 中的异常似乎是因为 SerialNumber 在某处为零。我没有解决方法,已将其报告给 bugreport.apple.com(错误 16075785)。

实际导致异常的方法是确定性的,但因计算机而异。在一台具有内部蓝牙 4.0 芯片的计算机上,它是对-[CBPeripheral discoverCharacteristics:forService:] 的调用。在另一台带有蓝牙 4.0 USB 适配器的计算机上,调用 -[CBPeripheral writeValue:forCharacteristic:type:]-[CBPeripheral setNotifyValue:forCharacteristic:]

'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: SerialNumber)'
    *** First throw call stack:
    (
        0   CoreFoundation                      0x00007fff91b1141c __exceptionPreprocess + 172
        1   libobjc.A.dylib                     0x00007fff9231de75 objc_exception_throw + 43
        2   CoreFoundation                      0x00007fff91a0c62e -[__NSDictionaryM setObject:forKey:] + 1102
        3   blued                               0x0000000103d5d422 blued + 336930
        4   blued                               0x0000000103d4b115 blued + 262421
        5   IOBluetooth                         0x00007fff97354093 -[IOBluetoothL2CAPChannel processIncomingData:] + 576
        6   IOBluetooth                         0x00007fff97353e3c -[IOBluetoothL2CAPChannel handleMachMessage:] + 45
        7   Foundation                          0x00007fff94d98e35 __NSFireMachPort + 94
        8   CoreFoundation                      0x00007fff91a42d04 __CFMachPortPerform + 388
        9   CoreFoundation                      0x00007fff91a42b69 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41

编辑 2014-02-27:我的特定崩溃发生是因为设备 GATT 表包含服务 180A «设备信息»中的特征 2A25 «序列号字符串»的无效非 UTF8 值,并且 blued 守护程序正在创建一个 NSString * 从中提取并将其放入 NSMutableDictionary。一个临时的解决方法是通过跳转到最近的 ret 命令使 setObject:forKey: 在 blued 内永远不会失败:

sudo /Applications/Xcode.app/Contents/Developer/usr/bin/lldb <<PID of blued>>
breakpoint set --fullname "-[__NSDictionaryM setObject:forKey:]" --condition "$rdx == 0"
breakpoint command add 1
register write pc `$pc+967`
continue
DONE

【讨论】:

  • 只是添加到这个。如果您在开发过程中最终在 OSX 中得到一个错误的 GATT 表,您可以通过重新启动计算机来重置它。在尝试重新启动之前,我花了两个小时试图弄清楚为什么我无法发现任何服务。重启解决了。通过禁用适配器并重新启用它(这会清除 GATT 缓存),可以在 iOS 上清除错误的 GATT 表。
  • @SandyChapman,对于一些不正确的 GATT 条目,重启是不够的。请参阅Does blued cache ATT values, and how to clear the cache? 手动删除它。
  • 您是如何获得堆栈跟踪的?我在 iOS 上运行,我得到的只是日志
  • @AndréFratelli,我得到的堆栈跟踪来自 OSX 上的蓝色崩溃,它可以在诊断下的控制台中找到。我不必在 iOS 上检索系统守护程序的崩溃报告,但希望本指南对您有所帮助:Chromium: Retrieving Crash Reports on iOS
  • 经历过类似的事情 - 已通过重置 iOS 上的网络设置来清除蓝牙设备缓存。
【解决方案2】:

我也遇到过 - 特别是在启动 CBCentralManager (CM) 扫描时 当我停止 CM 扫描并重新启动它时 - 它通常会得到解决。 恐怕这是CoreBluetooth实现中的一个错误

【讨论】:

  • 请大家继续向 Apple 报告。我们需要让他们解决这些问题。我也遇到同样的错误,这是完全不可接受的。
  • 这里有同样的问题。在 Macbook PRO Retina 15 上运行 10.9.2。
【解决方案3】:

我在向 CBPeripheralManager 添加服务时遇到了这个崩溃。事实证明,我在获取一些特征 ID 的方法中有一个令人讨厌的拼写错误(没有编译器错误或警告)。因此,使用 nil id 创建了几个特征。我得到的只是 iOS 7.1.1 下的日志中的这个错误,并且在查看我的设备日志时发现了 BTServer 崩溃报告。我的 iOS 8.1.2 设备没有将此记录到控制台,因此发现问题可能会更糟。

【讨论】:

    【解决方案4】:

    意外发现此错误的另一个原因:USB 集线器和连接不良或电源不佳导致我的调试环境损坏。这意味着它确实不定期报告错误。

    关于我的 Odyssee 的更多信息:通常我直接连接到构建机器,但是当我遇到这个问题时,它是通过我的显示器的 USB 集线器连接的。我重新启动了 Xcode,重新启动了 buildmachine,但没有成功。 有趣的事实:相同的设置现在可以正常工作 3 天,但在星期五(今天)连接到调试器时很不情愿。

    希望这个提示不是一次性的奇迹;-)

    【讨论】:

      猜你喜欢
      • 2018-09-29
      • 1970-01-01
      • 2017-10-08
      • 2020-11-02
      • 2015-12-17
      • 2018-02-13
      • 2018-05-22
      • 2017-08-10
      • 1970-01-01
      相关资源
      最近更新 更多