objective-c - 我可以收到发送 nil objects 消息的警告吗?

标签 objective-c testing runtime warnings null

我知道在 Objective-C 中向 nil 对象发送消息是完全没问题的。但是,我很好奇是否有任何运行时支持来标记此类情况。我可以看到这在测试/调试情况下很有用。

最佳答案

在对调试器进行了一些调试后,这就是我的发现。

您可以在 objc_msgSend 中设置断点,第一个参数的断点条件为零(接收方):

  1. 打开“断点”窗口:Command-Option-B
  2. 双击最后一行创建一个新的符号断点
  3. 输入符号:objc_msgSend
  4. 在“条件”栏输入条件:*(int*)($esp+4) == 0

当您运行可执行文件时,它会经常中断,因为向 nil 发送消息是很常见的。要大致了解正在发生的事情,您可以进一步配置断点:

  1. 按加号按钮添加断点命令。
  2. 从弹出窗口中选择“调试器命令”。
  3. 在命令字段中输入p (char*)*(int*)($esp+8)
  4. 单击断点行中的“自动继续”复选框(最后一列中带有小箭头的那个)

当您现在继续执行时,您将在调试器控制台中看到所有消息名称(发送到 nil)。

以上所有仅适用于 Intel Mac(模拟器中的 32 位 Cocoa 或 Cocoa Touch)。 PPC 或 ARM 体系结构使用其他寄存器名称和调用约定。我把它作为练习留给您,以找出如何在这些平台上运行它;)

关于objective-c - 我可以收到发送 nil objects 消息的警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573488/

相关文章:

unit-testing - 如何在 selenium 测试 phpunit 打开命令之前等待?

java - 运行时切换实现

c# - 如何提高我的 ECMAScript 实现的递归能力?

objective-c - 使用indexPathsForVisibleItems时仅获取NSIndexPath的一部分

Android:锁定屏幕/主屏幕的 Espresso 测试

testing - PHP 的异常驱动编程?

c++ - 处理输入 : growing an array, 或计数输入、分配、然后读取的速度

iphone - UITableView 的单元格在不可见时释放

iOS 修复 UITableViewController 顶部的搜索栏?

objective-c - NSView 的角是透明的,但不应该是