【发布时间】:2011-12-07 06:28:01
【问题描述】:
Xcode 4 告诉我 NSAssert 何时失败,但不再记录断言描述和回溯。我看过这个问题:
How to make Xcode4 stop at NSAssert failure?
这很有帮助,但我宁愿记录断言并继续。我怎样才能让 NSAssert 表现得这样?谢谢!
【问题讨论】:
标签: ios cocoa debugging xcode4 assert
Xcode 4 告诉我 NSAssert 何时失败,但不再记录断言描述和回溯。我看过这个问题:
How to make Xcode4 stop at NSAssert failure?
这很有帮助,但我宁愿记录断言并继续。我怎样才能让 NSAssert 表现得这样?谢谢!
【问题讨论】:
标签: ios cocoa debugging xcode4 assert
您链接到的问题可以帮助您完成大部分工作。将断点操作添加到您为断言设置的断点。从断点导航器中选择断点,单击鼠标右键,然后选择编辑断点。选择 Edit Breakpoint 会打开一个弹出式编辑器。在弹出式编辑器中,您应该会看到带有文本 Click to add an action 的 Action 行。单击该文本以打开菜单。从操作菜单中选择日志消息。选中评估操作后自动继续复选框以在记录消息后自动继续。
【讨论】:
如果您需要登录并继续,则无需使用 NSAssert。
通常,开发人员在调试版本中使用断言来在检测到严重错误时立即停止应用程序的执行。默认情况下,Xcode 项目在发布版本中设置 NS_BLOCK_ASSERTIONS 以便 NSAssert 调用编译出来。
对于只需要记录到控制台的小问题,您应该只使用 NSLog。 (调试器控制台实际上显示了发送到“stdout”的数据,这是 NSLog 发送结果的地方。)
如果您需要调试版本来断言和发布构建以记录,只需使用两者。是的,这意味着您可能会在代码中出现两次相同的描述,但这很好。任何开发人员都很容易理解它。 (您可以先创建结果字符串,如果您愿意,可以将其提供给 NSAssert 和 NSLog。)
如果您必须覆盖 NSAssert 调用的行为,那么您有 2 个选项: 1-改变NSAssert、NSAssert1、NSAssert2等的宏定义来改变结果。 2- 为你的线程提供你自己的 NSAssertionHandler 对象,让它跳过抛出异常。
【讨论】: