2011-10-14 10 views
4

我習慣於在Xcode的obj-c代碼中設置斷點,然後進入/退出我的方法,但我不完全瞭解當我發現自己正在逐步執行Apple框架代碼時會發生什麼情況。Xcode調試器 - 爲什麼你只能到目前爲止進入Apple框架代碼?

當然,我們沒有源等所有你能看到的是反彙編代碼(我不知道BTW多少彙編)

如果我(爲它的地獄)只是不停地踏步通過程序集,然後最終我從調試器中跳出,並在堆棧框架窗格中,我只是將我的應用程序列爲運行,模擬器中的應用程序現在正在運行,不再暫停。

我知道這是一個理論問題,但爲什麼我不能無休止地通過彙編代碼?畢竟,我的應用程序仍在運行。

+0

您遇到某種特權代碼,其中調試器無法設置斷點。 –

+0

這聽起來像你可能已經擊中了運行循環,這意味着調試器仍在步進。嘗試在模擬器中執行一個事件並查看它是否返回調試器。 – ughoavgfhw

+0

@ughoavgfhw是的,如你所建議的那樣,如果我執行另一個動作,我會回到調試器。你對這裏發生的事情有更多的瞭解嗎? (順便說一下,我不認爲我非常喜歡runloop正在做什麼;懷疑這可能是事情) – Brynjar

回答

3

您所遇到的是運行循環。運行循環負責查找應用程序處理事件並將其發送到正確的處理程序的事件。它通過調用操作系統來請求下一個事件來完成此操作。如果系統沒有任何等待該應用程序的事件,它將使應用程序進入休眠狀態,直到它獲得一個。然後它將返回新事件,運行循環將處理它。

但是,由於應用程序將控制權交給操作系統以獲取事件,因此在控制權返回應用程序之前,調試器不允許查看發生了什麼。由於它正在逐步執行它所看到的唯一指令,因此調試器會將該應用程序視爲正在運行。 Xcode會向您報告並激活模擬器,以便您可以在運行時看到它在做什麼。

只要您在模擬器中執行一個事件,操作系統就會發現有一個事件掛起並將其喚醒,並將控制權返回到運行循環。調試器將此視爲完成最後一條指令的步驟,並允許您繼續正常步進。從這一點開始,您可以逐步瀏覽應用程序使用的所有事件處理代碼,並且,如果您進入調用,甚至可能返回到您的代碼中,然後再返回到運行循環以再次等待下一個事件。

相關問題