| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- #include <stdio.h>
- #include <windows.h>
- #include <dbghelp.h>
- #pragma comment(lib, "Dbghelp.lib")
- #define DUMP_TYPE MiniDumpNormal| MiniDumpWithDataSegs | MiniDumpWithCodeSegs | MiniDumpWithFullMemory\
- | MiniDumpWithThreadInfo | MiniDumpWithPrivateReadWriteMemory\
-
- LONG WINAPI _UnhandledExceptionFilter( struct _EXCEPTION_POINTERS *lpExceptionInfo )
- {
- LONG ret = EXCEPTION_EXECUTE_HANDLER;
- TCHAR szFileName[64];
- SYSTEMTIME st;
- ::GetLocalTime(&st);
- wsprintf(szFileName, TEXT("¡¾%04d-%02d-%02d-%02d-%02d-%02d-%02d-%02d¡¿_OCC_V3.0.dmp"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, rand()%100);
- HANDLE hFile = ::CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
- if ( hFile != INVALID_HANDLE_VALUE )
- {
- MINIDUMP_EXCEPTION_INFORMATION ExInfo;
- ExInfo.ThreadId = ::GetCurrentThreadId();
- ExInfo.ExceptionPointers = lpExceptionInfo;
- ExInfo.ClientPointers = false;
- // write the dump
- BOOL bOK = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpWithFullMemory, &ExInfo, NULL, NULL );
- if ( bOK )
- {
- printf("Create Dump File Success!/n");
- }
- else
- {
- printf("MiniDumpWriteDump Failed: %d/n", GetLastError());
- }
- ::CloseHandle(hFile);
- }
- else
- {
- printf("Create File %s Failed %d/n", szFileName, GetLastError());
- }
- return ret;
- }
|