|
|
@ -66,10 +66,20 @@ LONG crash_handler(struct _EXCEPTION_POINTERS* ex_info) { |
|
|
|
return EXCEPTION_EXECUTE_HANDLER; |
|
|
|
return EXCEPTION_EXECUTE_HANDLER; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void abort_handler(int sig) { |
|
|
|
|
|
|
|
gpr_log(GPR_DEBUG, "Abort handler called."); |
|
|
|
|
|
|
|
if (IsDebuggerPresent()) { |
|
|
|
|
|
|
|
__debugbreak(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
_exit(1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void install_crash_handler() { |
|
|
|
static void install_crash_handler() { |
|
|
|
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER) crash_handler); |
|
|
|
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER) crash_handler); |
|
|
|
_set_abort_behavior(0, _WRITE_ABORT_MSG); |
|
|
|
_set_abort_behavior(0, _WRITE_ABORT_MSG); |
|
|
|
_set_abort_behavior(0, _CALL_REPORTFAULT); |
|
|
|
_set_abort_behavior(0, _CALL_REPORTFAULT); |
|
|
|
|
|
|
|
signal(SIGABRT, abort_handler); |
|
|
|
} |
|
|
|
} |
|
|
|
#else |
|
|
|
#else |
|
|
|
static void install_crash_handler() { } |
|
|
|
static void install_crash_handler() { } |
|
|
|