对于我的iPhone项目中的断言宏,我正在寻找一种以编程方式进入调试器的方法.在Windows(MSVC++)上,我可以使用__debugbreak()来实现此目的.调用此函数将停止我的程序,启动调试器,并显示调用__debugbreak()的行的调用堆栈.
iPhone的__debugbreak()有什么类似的东西吗?我已经尝试过Debugger(),但这给了我一个链接器错误.
谢谢,克劳斯
我正在尝试实现自定义资产宏(类似于assert.h所具有的),但我希望能够在获得并断言之后继续执行.
例如,一个这样的ASSERT实现可以是:
#define ASSERT(expr) ((void)( (!!(expr)) || (__debugbreak(), 0)))
Run Code Online (Sandbox Code Playgroud)
__debugbreak是Microsoft编译器中的一个内部函数,它插入了软件断点,相当于_asm int 3x86.对于iOS,有不同的方法来实现__debugbreak:
__asm__("int $3"); 对于x86.__asm__("bkpt #0"); 对于常规手臂.__asm__("brk #0"); for arm64raise(SIGTRAP)但是当我的断言命中时,所有这些都不能简单地跨过并继续我在使用visual studio时可以做的事情; 当我的iOS构建中的某些东西断言它在断言时卡住了,我别无选择,只能终止,我甚至无法手动移动指令指针并跳过断言.
是否有可能在iOS上实现断言进入调试器并仍允许我继续执行的断言?