当在C语言中调用abort()时,我该如何指定一条信息?

3
我尝试在一台非常老的MacOS版本中打开Minecraft。每次打开时,它都会显示Minecraft启动器意外退出,并在底部显示一个自定义消息。
Exception Type: SIGABRT  
Exception Code: 0x000000000000 0x000000000000  
Exception Note: EXC_CORPSE_NOTIFY

Application Specific Information:  
abort() called  
Minecraft requires at least MacOS 10.9, and trying to run on 10.8.5

我该如何在我的代码中实现同样的功能?如果我调用abort(),我如何指定一个原因在应用程序特定信息下显示在意外退出的应用程序窗口中?


1
@Barmar 你确定吗?Minecraft启动器可以做到,我不知道启动器是用什么语言编写的,但如果我能在任何启动器使用的语言中实现它,我也可以在C语言中实现。 - user13783520
2
这不是标准C中abort()功能的一部分。 "异常说明"似乎是MacOS(也可能是特定语言)的特定内容,因此您应该相应地进行标记。 - Nate Eldredge
2
@machine_1 不,我只是用Minecraft作为一个例子,来说明我想知道如何做某件事情。 - user13783520
1
https://www.allocinit.net/blog/2008/01/04/application-specific-information-in-leopard-crash-reports/ 看起来相关,但是说这是未记录的。 - Nate Eldredge
1
我不知道为什么有这么多人说另一个程序已经在做的事情是不可能的。显然,因为另一个程序正在这样做,所以它是可能的!当然,这是针对 Mac 的。 - user253751
显示剩余3条评论
2个回答

0

使用abort函数时无法指定错误消息(或任何消息)。abort函数仅结束程序(类似于exit函数)。

在调用abort之前,将输出到标准错误或使用assert语句是实现此功能的好方法。


1
并没有回答问题。显然Minecraft可以做到这一点,所以某种程度上是可能的。这可能涉及调用另一个函数,例如。而且消息是在“abort() called”之后写的。请注意,这是一个特定于Mac的问题。 - user253751

0

在使用abort()函数调用时,无法指定任何消息。请参阅ANSIC标准定义和描述abort函数的文档,并获取答案。
在调用abort()之前,您可以将任何字符串消息写入stdoutstderr

#include <stdlib.h>
void abort(void);

abort 函数会导致异常程序终止,除非信号 SIGABRT 被捕获并且信号处理程序不返回。未写入缓冲数据的打开流是否被刷新、打开流是否关闭或临时文件是否被删除是由实现定义的。通过函数调用 raise(SIGABRT),以实现定义的方式向主机环境返回失败终止状态。abort 函数不会返回给其调用者。


1
并没有回答问题。显然Minecraft可以做到这一点,所以某种程度上是可能的。这可能涉及调用另一个函数,例如。而且消息是在“abort() called”之后写的。请注意,这是一个特定于Mac的问题。 - user253751

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接