我可以收到发送零对象消息的警告吗?
答
在调试器摆弄了一下之后,我发现了这一点。
您可以objc_msgSend
与断点条件的第一个参数设置一个断点为零(接收):
- 打开“断点”窗口:命令选项-B
- 双击最后一行上创建一个新的符号断点
- 输入符号:
objc_msgSend
- 在“条件”列中输入条件:
*(int*)($esp+4) == 0
当您运行可执行文件时,它会经常中断,因为发送消息到nil非常常见。要了解发生了什么的概述,您可以进一步配置断点:
- 按加号按钮添加断点命令。
- 从弹出窗口中选择“调试器命令”。
- 在命令字段中输入
p (char*)*(int*)($esp+8)
- 单击断点行(一个在最后一列的小箭头)
如果现在继续执行,你会在“自动继续”复选框在调试器控制台中查看所有消息名称(发送到零)。
以上所有内容仅适用于Intel Mac(模拟器中的32位Cocoa或Cocoa Touch)。 PPC或ARM体系结构使用其他寄存器名称和调用约定。我把它作为一个练习,你找出如何让这些平台上的这方面的工作;)
我已将您的博客添加到我的RSS - 伟大的东西。 – nall 2009-10-15 22:36:45
很酷。我在待办事项列表上有更多的帖子。只需要找到时间。 – bbum 2009-10-16 05:42:37