2014-10-06 65 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

相關問題