首先,由于您正在开发 iPhone 应用程序,因此您可能应该使用 NSAssert() 而不是普通的 BSD 断言函数。
e.g. NSAssert(the_object, @"NIL object encountered");
NSAssert 宏将抛出 Objective-C 异常(NSInternalInconsistencyException
) 如果断言失败。
由于您的目标是在异常发生时中断,因此下一步是使 Xcode 调试器在 Objective-C 异常时中断。无论如何,这可能是一件好事。
在“断点”窗口(“运行”->“显示”->“断点”菜单项)中,单击显示“双击符号”的位置以输入符号-[NSException raise]
最后要小心的是 NSAssertsnot在发布版本中编译。这意味着您必须准备好处理应用程序中的异常,或者需要创建自己的宏来在发布版本中进行编译。
这是我用来在运行时代码中编译断言的宏(请注意,我随后在代码中使用 HMAssert 而不是 NSAssert):
#ifdef DEBUG
# define HMAssert(A,B) NSAssert(A,B)
#else
# define HMAssert(A,B)
#endif
这需要定义一个 DEBUG 预处理器宏。设置方法如下:
- 在 Xcode 中右键单击您的项目。这将是左侧面板中列出您的项目文件的顶部项目
- 从弹出的上下文菜单中选择“获取信息”。
- 转到“构建”选项卡。
- 确保“配置”设置为“调试”。
- 在“GCC 4.2 - 预处理”下“预处理器宏”旁边的字段中输入 DEBUG。