什么指令导致Xcode中的硬破坏?例如,在Visual下,我可以执行'_asm int 3‘或'DebugBreak()’。在某些GCC实现下,它是asm(“断开0")或asm(”陷阱“)。
我在Xcode下尝试过各种组合,没有任何运气。(内联汇编程序工作正常,因此不存在语法问题)。
作为参考,这是一个断言宏。我不想使用assert.h中的定义,这既是为了便于移植,也是因为它们似乎在XCode提供的版本中执行了abort()。
约翰-超级,干杯。作为参考,int 3语法是Intel和iPhone所需的语法。
Chris --谢谢您的评论,但是有很多理由可以避免将代码库移植到不同平台上的标准assert()函数。如果您遇到了滚动自己断言的麻烦,这通常是因为您希望保留额外的功能(日志记录、堆栈展开、用户交互)。
您建议通过实现“__assert”或类似的方法来替换hander的建议是不可移植的。标准的'assert‘通常是一个宏,虽然它可以映射到Mac上的__assert,但在其他平台上却并非如此。
发布于 2008-09-01 00:22:27
3.html
asm {trap} ; Halts a program running on PPC32 or PPC64.
__asm {int 3} ; Halts a program running on IA-32.发布于 2008-09-01 22:28:13
您只需插入一个对Debugger()的调用-这将停止您的应用程序在调试器(如果它是在调试器下运行),或停止它的例外,如果它不是。
此外,由于“可移植性的原因”,assert() 不避免--可移植性是它存在的原因!它是标准C的一部分,只要找到C编译器,就能找到它。您真正想要做的是定义一个新的断言处理程序,它执行调试器中断,而不是调用abort();几乎所有C编译器都提供了一种机制,您可以通过这种机制来实现这一点。
通常,这是通过简单地实现这个原型之后的一个函数或宏来完成的:
void __assert(const char *expression, const char *file, int line);当断言表达式失败时调用它。通常,执行“printf()接abort()”的是它,而不是abort()本身,这是默认的文档化行为。通过自定义此函数或宏,可以更改其行为。
发布于 2012-09-07 16:16:06
https://stackoverflow.com/questions/37299
复制相似问题