为什么"模拟后台获取"会导致崩溃(libsystem_kernel.dylib`mach_msg_trap),因为Xcode 8?

DCT*_*ght 28 ios xcode8

我在macOS Sierra,Xcode 8上,每当我尝试在实际的iOS 10设备上模拟背景提取时都会崩溃.使用模拟器时不会发生这种情况.这发生在所有项目中,包括那些刚创建的项目.

    libsystem_kernel.dylib`mach_msg_trap:
    0x18cfec164 <+0>: movn   x16, #0x1e
    0x18cfec168 <+4>: svc    #0x80
->  0x18cfec16c <+8>: ret   (Thread 1: signal SIGSTOP)
Run Code Online (Sandbox Code Playgroud)

我没有任何其他iOS设备可供测试; 是其他人经历过这个吗?

Ada*_*ney 19

我正在运行带有设备的Xcode 8.1 - 它没有崩溃,但是它遇到了一个你无法找到/编辑/删除的断点.

我转到Debug> Continue,它按预期继续.


Mat*_*tie 15

你并不孤单 - 我也遇到过这种情况.真烦人 我刚刚提交了一个错误.

  • 就我而言,xcode只是暂停执行.我注意到,如果你告诉它继续执行,确实模拟了后台提取. (12认同)
  • @ user3034715是对的,看起来它不是一个bug,但苹果改变了xcode的方式,只需点击播放按钮就可以解决xcode 8.0上的这个问题 (3认同)

小智 5

正如其他人所指出的那样.它不是崩溃,而是由系统触发的自动断点.正如爱斯基摩在这里解释的那样:

那么,为什么它会在mach_msg_trap中停止?目标是让您有机会在后台获取处理代码中设置断点,因此Xcode会强制您的应用程序停止,就像您按下暂停按钮一样(Debug> Pause).它在mach_msg_trap中停止,因为当您的应用程序在后台暂停时,这就是您的主线程所在的位置.简而言之,当您执行Debug> Simulate Background Fetch并在mach_msg_trap中停止时:

  1. 这是预期的行为
  2. 这不是任何问题的迹象
  3. 您可以通过Debug> Continue安全地继续执行

就个人而言,我认为它更像是一个错误,而不是一个功能.