_set_abort_behavior

指定当程序异常终止时要采取的操作。

注意

不要使用 abort 函数关闭 Microsoft Store 应用,除非是在测试或调试场景下。 根据 Microsoft Store 策略,禁止以编程或 UI 方式关闭 Store 应用。 有关详细信息,请参阅 UWP 应用生命周期

语法

unsigned int _set_abort_behavior(
   unsigned int flags,
   unsigned int mask
);

参数

flags
abort 标志的新值。

mask
要设置的 abort 标志位掩码。

返回值

标志的旧值。

备注

有两个 abort 标志:_WRITE_ABORT_MSG_CALL_REPORTFAULT_WRITE_ABORT_MSG 确定在程序异常终止时是否打印有帮助的文本信息。 该消息声明应用程序已调用 abort 函数。 默认行为是打印该消息。 _CALL_REPORTFAULT(如果已设置)会在调用 abort 时调用 Windows 错误报告服务机制(以前称为 Dr. Watson),从而向 Microsoft 报告故障。 默认情况下,在非调试生成中启用故障转储报告。 如果未调用 Windows 错误报告处理程序,则 abort 将调用 _exit 以使用退出代码 3 终止该进程,并将控制权返回给父进程或操作系统。 _exit 不刷新流缓冲区或执行 atexit/_onexit 处理。

出于 Windows 兼容性原因,当 abort 调用 _exit 时,它可能会调用 Windows ExitProcess API,而该 API 又会允许 DLL 终止例程运行。 析构函数不在可执行文件中运行,但对于加载到可执行文件进程空间中的 DLL,可能并非如此。 这种行为并不严格符合 C++ 标准。 若要立即终止包含任何 DLL 的进程,请使用 Windows TerminateProcess API。 还可以注册一个中止信号处理程序,该处理程序调用 TerminateProcess 以实现符合标准的行为。 实现合规行为可能会在 Windows 兼容性方面付出一些代价。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此状态,请参阅 CRT 中的全局状态

要求

例程 必需的标头
_set_abort_behavior <stdlib.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_set_abort_behavior.c
// compile with: /TC
#include <stdlib.h>

int main()
{
   printf("Suppressing the abort message. If successful, this message"
          " will be the only output.\n");
   // Suppress the abort message
   _set_abort_behavior( 0, _WRITE_ABORT_MSG);
   abort();
}
Suppressing the abort message. If successful, this message will be the only output.

请参阅

abort