我知道將消息發送到Objective-C中的零對象是完全正確的。不過,我很好奇是否有任何運行時支持來標記這種情況。我可以看到這在測試/調試情況下很有用。我可以收到發送零對象消息的警告嗎?
12
A
回答
14
在調試器擺弄了一下之後,我發現了這一點。
您可以objc_msgSend
與斷點條件的第一個參數設置一個斷點爲零(接收):
- 打開「斷點」窗口:命令選項-B
- 雙擊最後一行上創建一個新的符號斷點
- 輸入符號:
objc_msgSend
- 在「條件」列中輸入條件:
*(int*)($esp+4) == 0
當您運行可執行文件時,它會經常中斷,因爲發送消息到nil非常常見。要了解發生了什麼的概述,您可以進一步配置斷點:
- 按加號按鈕添加斷點命令。
- 從彈出窗口中選擇「調試器命令」。
- 在命令字段中輸入
p (char*)*(int*)($esp+8)
- 單擊斷點行(一個在最後一列的小箭頭)
如果現在繼續執行,你會在「自動繼續」複選框在調試器控制檯中查看所有消息名稱(發送到零)。
以上所有內容僅適用於Intel Mac(模擬器中的32位Cocoa或Cocoa Touch)。 PPC或ARM體系結構使用其他寄存器名稱和調用約定。我把它作爲一個練習,你找出如何讓這些平臺上的這方面的工作;)
4
相關問題
- 1. 發送消息到對象
- 2. 我可以在android中的數據消息(FCM)中發送對象嗎?
- 3. 我可以嘗試/發現警告嗎?
- 4. 對象用於發送消息或接收消息?
- 5. 警告: 「消息的接收者 'sizeWithFont:constrainedToSize:lineBreakMode:' 是零......」
- 6. 發送消息給對象
- 7. JMS - 發送對象消息
- 8. 我的C++ ActiveMQ客戶端可以發送消息,但不能接收消息
- 9. 發送JMS消息導致通過JMS主題發送消息時警告
- 10. 我可以向HttpResponseBadRequest中的django模板發送消息嗎?
- 11. 我可以發送一個對象到反應形式嗎?
- 12. 警告消息
- 13. 可以選擇性清除Visual Studio警告消息嗎?
- 14. 我可以直接向隊列發送消息請求嗎?
- 15. 我的活動可以收到發送MMI的結果嗎?
- 16. 我收到以下警告'架構i386'
- 17. MFC發送消息中的對象
- 18. iframe-resizer發送消息,但未收到
- 19. XMPPHP發送消息,但不會收到
- 20. 我可以收集來自log4j的日誌(消息)到一個Java對象
- 21. 發送與jQuery的JSON對象,但在組合中收到零
- 22. 將消息發送到目標c中的零對象是否有缺點?
- 23. GCM可以向VoIP iOS發送推送通知消息嗎?
- 24. LinearLayout或其LinearLayout父項無用,我可以忽略警告消息嗎?
- 25. ADBannerView警告消息
- 26. 我可以在JDBC中忽略或取消警告嗎?
- 27. SQL:第一,我收到消息來自或發送到他們的最新發送的消息和時間
- 28. 我可以發送多少條消息到隊列?
- 29. 我可以收到有關過分限制類型簽名的警告嗎?
- 30. 誰收到了我發佈的消息
我已將您的博客添加到我的RSS - 偉大的東西。 – nall 2009-10-15 22:36:45
很酷。我在待辦事項列表上有更多的帖子。只需要找到時間。 – bbum 2009-10-16 05:42:37