Sev*_*yev 8 iphone debugging xcode assert objective-c++
我正在调试一个严重断言()的iPhone应用程序(Xcode,Objective-C++和设备模拟器).在某些情况下,断言失败只会终止应用程序,而不是像我期望的那样进入调试器.
我通过实现我自己的有效断言来解决这个问题:
#define AssertLite(b) if(!(b)) {asm {int 3}}
Run Code Online (Sandbox Code Playgroud)
(绒毛省略),但我想知道是否有人遇到过这个.我无法确定何时断开以及何时终止的模式.代码没有线程化; 它只是在事件处理程序中完成.
为什么会发生这种情况,如何使vanilla assert()表现得像条件断点呢?
Mic*_*lor 15
首先,由于您正在使用iPhone应用程序,您应该使用NSAssert()而不是vanilla BSD断言函数.
例如 NSAssert(the_object, @"NIL object encountered");
NSInternalInconsistencyException如果断言失败,NSAssert宏将抛出Objective-C异常().
由于您的目标是打破异常,下一步是使Xcode调试器在Objective-C异常中断.无论如何,这可能是一件好事.
在"断点"窗口("运行" - >"显示 - >断点"菜单项)中,单击"双击符号"的位置以输入符号 -[NSException raise]
最后要注意的是NSAsserts 不会在发布版本中编译出来.这意味着您必须准备好在应用程序中处理异常,或者您需要创建自己的宏,该宏在发布版本中进行编译.
这是我用来在运行时代码中编译断言的宏(注意我在我的代码中使用HMAssert而不是NSAssert):
#ifdef DEBUG
# define HMAssert(A,B) NSAssert(A,B)
#else
# define HMAssert(A,B)
#endif
Run Code Online (Sandbox Code Playgroud)
这需要定义DEBUG预处理器宏.以下是如何设置:
| 归档时间: |
|
| 查看次数: |
12507 次 |
| 最近记录: |