2014-10-06 64 views
6

我看到主线程在我的应用程序中仅在iOS 8中冻结了几秒钟(不是以前的iOS版本)。
我在多个地方使用@synchronised (self),并且还使用RemoteIO设置。我的问题是,如何调试主线程阻塞的位置,并获取其他信息,例如当时正在执行的操作?
iOS主线程冻结了几秒钟

我使用的是Xcode 6,所以请告诉我最好的调试方法。

编辑:这是Pause的输出。

enter image description here

enter image description here

+0

调查仪器。 – dandan78 2014-10-06 06:34:39

+1

仪器 - >时间剖析器 – kabarga 2014-10-06 06:49:48

回答

9

作为第一步,了解发生了什么,我建议,当你有一个冻结只需按下暂停调试器。它会告诉你哪个线程正在做什么。

您将看到仍在执行的任务,或者msg_trap行指示某处存在锁定。

在此发布您发现的内容。

+1

好吧,早上起来,这让我疯狂。每当我找到启动时挂起的主线程,我都会暂停。它显示了13个待执行的块。它在顶部显示__semwait_signal,等待某个活动完成的主线程也是如此?我编辑了这个问题的附带屏幕截图。 – 2014-10-06 13:47:28

+0

如果我正确理解你在做什么,你对从摄像头捕获的视频有一些处理。所以要么处理每一帧需要很长的时间,要么回调过于频繁,所以不能在两次调用之间做任何事情。我认为这是你的代码,所以现在Time Profiler可以得到帮助。 – hybridcattt 2014-10-06 13:55:45

+0

实际上,我所做的并不昂贵,它只发生在iOS 8中。我确信我发现了iOS 8中的一个错误,有时(并非总是)导致主线程在启动时进入睡眠状态几秒钟。睡眠时间在1秒到15秒之间变化。我使用时间分析器,它显示主线程调用usleep。为什么主线程打电话是我不了​​解的。 – 2014-10-06 14:28:35

相关问题