You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.9 KiB
61 lines
1.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include <windows.h> |
|
#include <dbghelp.h> |
|
#include "tier0/minidump.h" |
|
#include "tools_minidump.h" |
|
|
|
static bool g_bToolsWriteFullMinidumps = false; |
|
static ToolsExceptionHandler g_pCustomExceptionHandler = NULL; |
|
|
|
|
|
// --------------------------------------------------------------------------------- // |
|
// Internal helpers. |
|
// --------------------------------------------------------------------------------- // |
|
|
|
static LONG __stdcall ToolsExceptionFilter( struct _EXCEPTION_POINTERS *ExceptionInfo ) |
|
{ |
|
// Non VMPI workers write a minidump and show a crash dialog like normal. |
|
int iType = MiniDumpNormal; |
|
if ( g_bToolsWriteFullMinidumps ) |
|
iType = MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory; |
|
|
|
WriteMiniDumpUsingExceptionInfo( ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo, (MINIDUMP_TYPE)iType ); |
|
return EXCEPTION_CONTINUE_SEARCH; |
|
} |
|
|
|
|
|
static LONG __stdcall ToolsExceptionFilter_Custom( struct _EXCEPTION_POINTERS *ExceptionInfo ) |
|
{ |
|
// Run their custom handler. |
|
g_pCustomExceptionHandler( ExceptionInfo->ExceptionRecord->ExceptionCode, ExceptionInfo ); |
|
return EXCEPTION_EXECUTE_HANDLER; // (never gets here anyway) |
|
} |
|
|
|
|
|
// --------------------------------------------------------------------------------- // |
|
// Interface functions. |
|
// --------------------------------------------------------------------------------- // |
|
|
|
void EnableFullMinidumps( bool bFull ) |
|
{ |
|
g_bToolsWriteFullMinidumps = bFull; |
|
} |
|
|
|
|
|
void SetupDefaultToolsMinidumpHandler() |
|
{ |
|
SetUnhandledExceptionFilter( ToolsExceptionFilter ); |
|
} |
|
|
|
|
|
void SetupToolsMinidumpHandler( ToolsExceptionHandler fn ) |
|
{ |
|
g_pCustomExceptionHandler = fn; |
|
SetUnhandledExceptionFilter( ToolsExceptionFilter_Custom ); |
|
}
|
|
|