2009-10-15 91 views

回答

14

在調試器擺弄了一下之後,我發現了這一點。

您可以objc_msgSend與斷點條件的第一個參數設置一個斷點爲零(接收):

  1. 打開「斷點」窗口:命令選項-B
  2. 雙擊最後一行上創建一個新的符號斷點
  3. 輸入符號:objc_msgSend
  4. 在「條件」列中輸入條件:*(int*)($esp+4) == 0

當您運行可執行文件時,它會經常中斷,因爲發送消息到nil非常常見。要了解發生了什麼的概述,您可以進一步配置斷點:

  1. 按加號按鈕添加斷點命令。
  2. 從彈出窗口中選擇「調試器命令」。
  3. 在命令字段中輸入p (char*)*(int*)($esp+8)
  4. 單擊斷點行(一個在最後一列的小箭頭)

如果現在繼續執行,你會在「自動繼續」複選框在調試器控制檯中查看所有消息名稱(發送到零)。

以上所有內容僅適用於Intel Mac(模擬器中的32位Cocoa或Cocoa Touch)。 PPC或ARM體系結構使用其他寄存器名稱和調用約定。我把它作爲一個練習,你找出如何讓這些平臺上的這方面的工作;)

相關問題