_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.