首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode等价于‘__asm int 3/ DebugBreak() / Halt?

Xcode等价于‘__asm int 3/ DebugBreak() / Halt?
EN

Stack Overflow用户
提问于 2008-09-01 00:18:18
回答 7查看 17.4K关注 0票数 23

什么指令导致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,但在其他平台上却并非如此。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-01 00:22:27

3.html

代码语言:javascript
复制
asm {trap}            ; Halts a program running on PPC32 or PPC64.

__asm {int 3}         ; Halts a program running on IA-32.
票数 24
EN

Stack Overflow用户

发布于 2008-09-01 22:28:13

您只需插入一个对Debugger()的调用-这将停止您的应用程序在调试器(如果它是在调试器下运行),或停止它的例外,如果它不是。

此外,由于“可移植性的原因”,assert() 不避免--可移植性是它存在的原因!它是标准C的一部分,只要找到C编译器,就能找到它。您真正想要做的是定义一个新的断言处理程序,它执行调试器中断,而不是调用abort();几乎所有C编译器都提供了一种机制,您可以通过这种机制来实现这一点。

通常,这是通过简单地实现这个原型之后的一个函数或宏来完成的:

代码语言:javascript
复制
void __assert(const char *expression, const char *file, int line);

当断言表达式失败时调用它。通常,执行“printf()abort()”的是它,而不是abort()本身,这是默认的文档化行为。通过自定义此函数或宏,可以更改其行为。

票数 11
EN

Stack Overflow用户

发布于 2012-09-07 16:16:06

代码语言:javascript
复制
__builtin_trap();

由于Debugger()现在已经折旧了,所以应该可以使用。

ref/doc/uid/DTS10003391-CH1-SECCONTROLLEDCRASH

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档