关于macOS:等效于’__asm int 3 / DebugBreak()/ Halt的Xcode?

关于macOS:等效于’__asm int 3 / DebugBreak()/ Halt的Xcode?

Xcode equivalent of ' __asm int 3 / DebugBreak() / Halt?

在Xcode中造成硬中断的指示是什么?例如,在Visual Studio中,我可以执行'_asm int 3'或'DebugBreak()'。在某些GCC实现中,它是asm(" break 0")或asm(" trap")。

我在Xcode下尝试了各种组合,但没有任何运气。 (内联汇编程序工作正常,因此这不是语法问题)。

供参考,这是一个断言宏。我既不想将assert.h中的定义用于可移植性,又因为它们似乎在XCode提供的版本中使用了abort()。

约翰-超级,欢呼。作为参考,int 3语法是Intel Macs和iPhone所需的一种。

克里斯(Chris)-感谢您的评论,但是有很多原因要避免将标准的assert()函数用于移植到不同平台的代码库。如果您遇到了无法确定自己的断言的麻烦,那通常是因为您希望保留其他功能(日志记录,堆栈展开,用户交互)。

您关于尝试通过实现'__assert'或类似方法来替换处理程序的建议将不会移植。标准的'assert'通常是一个宏,尽管在Mac上它可能映射到__assert,但在其他平台上却没有。


http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeProjectManagement/090_Running_Programs/chapter_11_section_3.html

1
2
3
asm {trap}            ; Halts a program running on PPC32 or PPC64.

__asm {int 3}         ; Halts a program running on IA-32.

您只需插入对Debugger()的调用-这将在调试器中停止您的应用程序(如果正在调试器中运行),或者如果没有,则将其异常终止。

另外,也不要因为"可移植性原因"而避免使用assert()-可移植性就是它存在的原因!它是Standard C的一部分,无论在哪里找到C编译器,都可以找到它。您真正想要做的是定义一个新的断言处理程序,该断言处理程序会中断调试程序,而不是调用abort();几乎所有的C编译器都提供了一种您可以执行此操作的机制。

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

1
void __assert(const char *expression, const char *file, int line);

断言表达式失败时调用。通常,它执行的是默认记录的行为" printf()后跟abort()"而不是assert()本身。通过自定义此函数或宏,可以更改其行为。


1
__builtin_trap();

由于Debugger()现在已贬值,因此应该可以使用。

https://developer.apple.com/library/mac/technotes/tn2124/_index.html#//apple_ref/doc/uid/DTS10003391-CH1-SECCONTROLLEDCRASH


为了后人:我有一些代码可在调试器中的正确堆栈帧处生成暂停,并(可选)暂停应用程序,以便您可以及时附加调试器。适用于模拟器和设备(如果需要,可能还适用于台式机)。详尽详尽的帖子,位于http://iphone.m20.nl/wp/2010/10/xcode-iphone-debugger-halt-assertions/


1
kill(getpid(), SIGINT);

可在模拟器和设备中使用。


我在Apple论坛中找到了以下内容:

Xcode doesn't come with any symbolic breaks built in - but they're
quick to add. Go to the breakpoints window and add:

-[NSException raise]


作为跨平台的直接Halt()替代品,还可以使用以下函数:

1
2
3
#include <stdlib.h>

void abort(void);

如果发生致命断言,我们将其用于iPhone实施的跨平台引擎中。跨Nintendo DS / Wii / XBOX 360 / iOS等的跨平台...


推荐阅读

    程序执行linux命令?

    程序执行linux命令?,系统,工作,地址,环境,信息,管理,命令,文件,目录,程序,lin

    linux执行2个命令?

    linux执行2个命令?,工作,系统,基础,命令,基础知识,信息,管理,在线,概念,第一

    命令查看linux中断?

    命令查看linux中断?,网络,系统,状态,管理,地址,进程,命令,数据,信息,基础,Lin

    linux命令批量执行?

    linux命令批量执行?,系统,代码,工作,周期性,数据,定期,环境,命令,文件,脚本,l

    linux二进制执行命令?

    linux二进制执行命令?,系统,工作,情况,代码,信息,位置,地址,命令,文件,目录,L

    linux执行退出命令?

    linux执行退出命令?,档案,状态,工作,命令,信息,地址,电脑,系统,编辑,文件,lin

    linux中后台执行命令?

    linux中后台执行命令?,系统,状态,暂停,灵活,电脑,网络,服务,第一,名字,命令,l

    linux常用的执行命令?

    linux常用的执行命令?,系统,地址,工作,基础,标准,命令,工具,环境,信息,代码,L

    linux执行线程命令?

    linux执行线程命令?,系统,工作,线程,软件,服务,管理,信息,环境,名称,命令,lin

    linux执行多条命令?

    linux执行多条命令?,数据,通信,管理,系统,命令,标准,信息,工具,代码,环境,Lin

    linux退出命令未执行?

    linux退出命令未执行?,服务,工具,代码,环境,数据,官网,命令,用户,脚本,字符

    linux动态执行命令?

    linux动态执行命令?,时间,信息,名字,工作,网上,业务,工具,对比,地址,下来,如

    linux命令执行次数?

    linux命令执行次数?,时间,系统,地址,命令,数据,管理,工具,信息,环境,历史,lin

    linux命令一起执行?

    linux命令一起执行?,系统,标准,设备,地方,软件,代码,网站,网络,周期性,命令,l

    查看执行的命令linux?

    查看执行的命令linux?,系统,地址,信息,工作,命令,灵活,网络,名称,情况,状态,

    linux中断程序命令?

    linux中断程序命令?,系统,管理,软件,传播,进程,命令,名称,程序,终端,指令,lin

    linux导出执行命令?

    linux导出执行命令?,数据,系统,命令,下来,位置,时间,工具,服务,文件,指令,lin

    linux持续执行命令?

    linux持续执行命令?,连续,定期,密码,系统,状态,命令,任务,文件,程序,前台,lin

    linux隐藏执行的命令?

    linux隐藏执行的命令?,工作,电脑,系统,地址,标准,信息,管理,命令,目录,软件,

    linux在哪执行命令?

    linux在哪执行命令?,电脑,命令,第一,第三,名字,系统,密码,脚本,终端,方法,怎