// CRT SIGTERM signal handler void crash_handler::sigterm_handler(int) { // Termination request (SIGTERM) // Retrieve exception information EXCEPTION_POINTERS* pExceptionPtrs = NULL; get_exception_pointers(0, &pExceptionPtrs); // Write minidump file create_mini_dump(pExceptionPtrs); // Terminate process TerminateProcess(GetCurrentProcess(), 1); }
// CRT Pure virtual method call handler void __cdecl crash_handler::pure_call_handler() { // Pure virtual function call // Retrieve exception information EXCEPTION_POINTERS* pExceptionPtrs = NULL; get_exception_pointers(0, &pExceptionPtrs); // Write minidump file create_mini_dump(pExceptionPtrs); // Terminate process TerminateProcess(GetCurrentProcess(), 1); }
// CRT unexpected() call handler void __cdecl crash_handler::unexpected_handler() { // Unexpected error (unexpected() function was called) // Retrieve exception information EXCEPTION_POINTERS* pExceptionPtrs = NULL; get_exception_pointers(0, &pExceptionPtrs); // Write minidump file create_mini_dump(pExceptionPtrs); // Terminate process TerminateProcess(GetCurrentProcess(), 1); }
// CRT SIGABRT signal handler void crash_handler::sigabrt_handler(int) { // Caught SIGABRT C++ signal // Retrieve exception information EXCEPTION_POINTERS* pExceptionPtrs = NULL; get_exception_pointers(0, &pExceptionPtrs); // Write minidump file create_mini_dump(pExceptionPtrs); // Terminate process TerminateProcess(GetCurrentProcess(), 1); }
// CRT new operator fault handler int __cdecl crash_handler::new_handler(size_t) { // 'new' operator memory allocation exception // Retrieve exception information EXCEPTION_POINTERS* pExceptionPtrs = NULL; get_exception_pointers(0, &pExceptionPtrs); // Write minidump file create_mini_dump(pExceptionPtrs); // Terminate process TerminateProcess(GetCurrentProcess(), 1); // Unreacheable code return 0; }
static void generate_report() { EXCEPTION_RECORD local_exception_record; CONTEXT local_context; EXCEPTION_POINTERS local_exception_pointers; local_exception_pointers.ExceptionRecord = &local_exception_record; local_exception_pointers.ContextRecord = &local_context; if (!exception_pointers_) { get_exception_pointers(&local_exception_pointers); exception_pointers_ = &local_exception_pointers; } create_minidump(); ::TerminateProcess(::GetCurrentProcess(), 100500); }
// CRT invalid parameter handler void __cdecl crash_handler::invalid_parameter_handler( const wchar_t* /* expression */, const wchar_t* /* function */, const wchar_t* /* file */, unsigned int /* line */, uintptr_t pReserved) { pReserved; // Invalid parameter exception // Retrieve exception information EXCEPTION_POINTERS* pExceptionPtrs = NULL; get_exception_pointers(0, &pExceptionPtrs); // Write minidump file create_mini_dump(pExceptionPtrs); // Terminate process TerminateProcess(GetCurrentProcess(), 1); }