C++隐藏程序崩溃,让程序优雅的崩溃

我们的程序并不能保证是完全稳定的,当程序崩溃时会展示一个崩溃提示框给用户,这给用户带来的感觉非常不友好。当我们的程序是一个服务程序时(没有ui界面),用户可能根本就感知不到这个程序的存在,这种情况下如果程序崩溃,在不显示崩溃提示的前提下,我们只需要将这个服务程序重启就可以了,这对用户来说可能会友好很多。下面的代码将可以拦截掉程序的崩溃:

LONG _stdcall ExceptionCallBack(PEXCEPTION_POINTERS pException) {
  return EXCEPTION_EXECUTE_HANDLER;
}

void __cdecl InvalidParameterHandler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t) {
  ExitProcess(0xFF);
}

void __cdecl PurecallHandler(void) {
  ExitProcess(0xFF);
}

void InitExceptionHandler() {
  ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
  ::_set_abort_behavior(0, _WRITE_ABORT_MSG);
  _set_invalid_parameter_handler(InvalidParameterHandler);
  _set_purecall_handler(PurecallHandler);
::SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ExceptionCallBack);
}

int main() {
  InitExceptionHandler();
  return 0;
}

本文为@艺文笔记原创文章,转载请注明出处:https://www.xuwenyan.com/archives/147,非常感谢!
上一篇:  下一篇: