Untabify minidumper

git-svn-id: https://svn.eduke32.com/eduke32@7100 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2018-10-25 23:30:46 +00:00
parent 2b01ea19b1
commit c0889dab31

View file

@ -9,105 +9,105 @@ MiniDumper g_dumper("eduke32");
MiniDumper::MiniDumper( LPCSTR szAppName ) MiniDumper::MiniDumper( LPCSTR szAppName )
{ {
// if this assert fires then you have two instances of MiniDumper // if this assert fires then you have two instances of MiniDumper
// which is not allowed // which is not allowed
assert( m_szAppName==NULL ); assert( m_szAppName==NULL );
m_szAppName = szAppName ? _strdup(szAppName) : "Application"; m_szAppName = szAppName ? _strdup(szAppName) : "Application";
::SetUnhandledExceptionFilter( TopLevelFilter ); ::SetUnhandledExceptionFilter( TopLevelFilter );
} }
LONG MiniDumper::TopLevelFilter( struct _EXCEPTION_POINTERS *pExceptionInfo ) LONG MiniDumper::TopLevelFilter( struct _EXCEPTION_POINTERS *pExceptionInfo )
{ {
LONG retval = EXCEPTION_CONTINUE_SEARCH; LONG retval = EXCEPTION_CONTINUE_SEARCH;
//HWND hParent = NULL; // find a better value for your app //HWND hParent = NULL; // find a better value for your app
// firstly see if dbghelp.dll is around and has the function we need // firstly see if dbghelp.dll is around and has the function we need
// look next to the EXE first, as the one in System32 might be old // look next to the EXE first, as the one in System32 might be old
// (e.g. Windows 2000) // (e.g. Windows 2000)
HMODULE hDll = NULL; HMODULE hDll = NULL;
char szDbgHelpPath[_MAX_PATH]; char szDbgHelpPath[_MAX_PATH];
if (GetModuleFileName( NULL, szDbgHelpPath, _MAX_PATH )) if (GetModuleFileName( NULL, szDbgHelpPath, _MAX_PATH ))
{ {
char *pSlash = _tcsrchr( szDbgHelpPath, '\\' ); char *pSlash = _tcsrchr( szDbgHelpPath, '\\' );
if (pSlash) if (pSlash)
{ {
_tcscpy( pSlash+1, "DBGHELP.DLL" ); _tcscpy( pSlash+1, "DBGHELP.DLL" );
hDll = ::LoadLibrary( szDbgHelpPath ); hDll = ::LoadLibrary( szDbgHelpPath );
} }
} }
if (hDll==NULL) if (hDll==NULL)
{ {
// load any version we can // load any version we can
hDll = ::LoadLibrary( "DBGHELP.DLL" ); hDll = ::LoadLibrary( "DBGHELP.DLL" );
} }
LPCTSTR szResult = "DBGHELP.DLL not found";; LPCTSTR szResult = "DBGHELP.DLL not found";;
char szScratch [_MAX_PATH]; char szScratch [_MAX_PATH];
if (hDll) if (hDll)
{ {
MINIDUMPWRITEDUMP pDump = (MINIDUMPWRITEDUMP)::GetProcAddress( hDll, "MiniDumpWriteDump" ); MINIDUMPWRITEDUMP pDump = (MINIDUMPWRITEDUMP)::GetProcAddress( hDll, "MiniDumpWriteDump" );
if (pDump) if (pDump)
{ {
char szDumpPath[_MAX_PATH]; char szDumpPath[_MAX_PATH];
// work out a good place for the dump file // work out a good place for the dump file
/*if (!GetTempPath( _MAX_PATH, szDumpPath )) /*if (!GetTempPath( _MAX_PATH, szDumpPath ))
_tcscpy( szDumpPath, "c:\\temp\\" ); _tcscpy( szDumpPath, "c:\\temp\\" );
*/ */
sprintf(szDumpPath,"%s_%u",m_szAppName,timeGetTime()); sprintf(szDumpPath,"%s_%u",m_szAppName,timeGetTime());
_tcscat( szDumpPath, ".dmp" ); _tcscat( szDumpPath, ".dmp" );
// ask the user if they want to save a dump file // ask the user if they want to save a dump file
//if (::MessageBox( NULL, "Something bad happened in your program, would you like to save a diagnostic file?", m_szAppName, MB_YESNO )==IDYES) //if (::MessageBox( NULL, "Something bad happened in your program, would you like to save a diagnostic file?", m_szAppName, MB_YESNO )==IDYES)
{ {
// create the file // create the file
HANDLE hFile = ::CreateFile( szDumpPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, HANDLE hFile = ::CreateFile( szDumpPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL ); FILE_ATTRIBUTE_NORMAL, NULL );
if (hFile!=INVALID_HANDLE_VALUE) if (hFile!=INVALID_HANDLE_VALUE)
{ {
_MINIDUMP_EXCEPTION_INFORMATION ExInfo; _MINIDUMP_EXCEPTION_INFORMATION ExInfo;
ExInfo.ThreadId = ::GetCurrentThreadId(); ExInfo.ThreadId = ::GetCurrentThreadId();
ExInfo.ExceptionPointers = pExceptionInfo; ExInfo.ExceptionPointers = pExceptionInfo;
ExInfo.ClientPointers = NULL; ExInfo.ClientPointers = NULL;
// write the dump // write the dump
BOOL bOK = pDump( GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL ); BOOL bOK = pDump( GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &ExInfo, NULL, NULL );
if (bOK) if (bOK)
{ {
sprintf( szScratch, "Saved dump file to \"%s\"", szDumpPath ); sprintf( szScratch, "Saved dump file to \"%s\"", szDumpPath );
szResult = szScratch; szResult = szScratch;
retval = EXCEPTION_EXECUTE_HANDLER; retval = EXCEPTION_EXECUTE_HANDLER;
} }
else else
{ {
sprintf( szScratch, "Failed to save dump file to \"%s\" (error %d)", szDumpPath, GetLastError() ); sprintf( szScratch, "Failed to save dump file to \"%s\" (error %d)", szDumpPath, GetLastError() );
szResult = szScratch; szResult = szScratch;
} }
::CloseHandle(hFile); ::CloseHandle(hFile);
} }
else else
{ {
sprintf( szScratch, "Failed to create dump file \"%s\" (error %d)", szDumpPath, GetLastError() ); sprintf( szScratch, "Failed to create dump file \"%s\" (error %d)", szDumpPath, GetLastError() );
szResult = szScratch; szResult = szScratch;
} }
} }
} }
else else
{ {
szResult = "DBGHELP.DLL too old"; szResult = "DBGHELP.DLL too old";
} }
::FreeLibrary(hDll); ::FreeLibrary(hDll);
} }
::MessageBox( NULL, szResult, m_szAppName, MB_OK ); ::MessageBox( NULL, szResult, m_szAppName, MB_OK );
return retval; return retval;
} }