如何在iOS 8.3中调试syscall_thread_switch?

由于移动到iOS 8.3,我遇到这个错误,主线程将被困在这调用中.其他一些线程也被卡在该通话中.在任何线程中,我的代码都没有导致这个电话,所以我很遗憾为什么会发生这种情况.有时在点击按钮栏项目时有时会重新绘制图表(使用ShinobiCharts)等.

这是Xcode的堆栈跟踪:

任何人都有任何线索,为什么这是发生和如何解决它?这是非常讨厌的,因为当我被困在那里,我必须重新启动应用程序.请注意,这是在模拟器中发生的.我正处于开发这个程序的早期阶段,大部分时间都花在模拟器中.我还没有看到在一个真实的设备上发生的错误,但是,我还没有经常在设备上运行该应用程序.

解决方法

敲木头,但我想我想到了(至少在我的例子).

什么导致解决方案是搜索syscall_thread_switch,这导致我在这里的答案:
https://stackoverflow.com/a/30333203/978509

其中,如果您查看我链接的回溯(https://gist.github.com/Shalmezad/65ff89d20aa7e0a9d094),则每个syscall_thread_switch之前都有OsspinLockLockSlow,答案笔记看起来像Livelock,但是由于cpu使用率较低,更为明显的是死锁.

通过我的代码,我发现对于每个后台任务,我每次创建一个新的dispatch_queue_t.我自从重新开始使用相同的队列,这似乎已经解决了这个问题.

没有来自敌人的更多信息(主要是一些代码片段,显示了他如何设置后台任务),我无法回答他们的具体问题,但这应该指出人们正确的方向来解决问题.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...