Create a dmp file from the application
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | static LPTOP_LEVEL_EXCEPTION_FILTER m_previousFilter = NULL; typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)( HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType, CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); static LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo) { HMODULE hDll = ::LoadLibrary(_T( "DBGHELP.DLL" )); MINIDUMPWRITEDUMP pDump = (MINIDUMPWRITEDUMP)::GetProcAddress(hDll, "MiniDumpWriteDump" ); _MINIDUMP_EXCEPTION_INFORMATION ExInfo; ExInfo.ThreadId = ::GetCurrentThreadId(); ExInfo.ExceptionPointers = pExceptionInfo; ExInfo.ClientPointers = NULL; MINIDUMP_CALLBACK_INFORMATION mci; // HANDLE hFile - minidamp file name(for example, "test.dmp") BOOL bOK = pDump(::GetCurrentProcess(), ::GetCurrentProcessId(), hFile, 1, &ExInfo, NULL, &mci); } void main() { // setup our own ExceptionHandler m_previousFilter = SetUnhandledExceptionFilter(MyUnhandledExceptionFilter); // actial work // befoe exit if (m_previousFilter) { SetUnhandledExceptionFilter(m_previousFilter); } } |