如何在iOS 8.3中调试syscall_thread_switch?

时间:2015-05-06 16:25:16

标签: ios multithreading debugging

自从迁移到iOS 8.3以来,我遇到了这个错误,主线程将在此调用中遇到困难。一些其他线程也被卡在该调用中。在导致此调用的任何线程中都没有我的代码,所以我很难过为什么会发生这种情况。有时,当点击按钮栏项时,有时会重绘图表(使用ShinobiCharts)等。

这是来自Xcode的堆栈跟踪:

enter image description here

任何人都知道为什么会发生这种情况以及如何解决这个问题?这很烦人,因为当我被困在那里时,我必须重新启动应用程序。请注意,到目前为止,这种情况发生在模拟器中。我正处于开发此应用程序的早期阶段,并将大部分时间花在模拟器上。我还没有看到在真实设备上发生的错误,但是,我还没有经常在设备上运行应用程序。

1 个答案:

答案 0 :(得分:5)

敲木头,但我想我想出来了(至少在我的例子中)。

导致解决方案的原因是搜索syscall_thread_switch,这使我得到了这个答案: https://stackoverflow.com/a/30333203/978509

其中,如果你查看我链接的回溯(https://gist.github.com/Shalmezad/65ff89d20aa7e0a9d094),每个syscall_thread_switch前面都有OSSpinLockLockSlow,答案说明看起来像一样,但由于CPU使用率低,更明显的是僵局。

通过我的代码,我发现对于每个后台任务,我每次都创建了一个新的dispatch_queue_t。我自己重做了如何使用相同的队列,这似乎解决了这个问题。

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