OSDN Git Service

WebGUIのレスポンスが悪かったのを修正
[peercast-im/PeerCastIM.git] / core / win32 / seh.cpp
1 #include "win32/seh.h"
2
3 void SEHdump(_EXCEPTION_POINTERS *lpExcept)
4 {
5         // crash dump
6         MINIDUMP_EXCEPTION_INFORMATION minidumpInfo;
7         HANDLE hFile;
8         BOOL dump = FALSE;
9
10         minidumpInfo.ThreadId = GetCurrentThreadId();
11         minidumpInfo.ExceptionPointers = lpExcept;
12         minidumpInfo.ClientPointers = FALSE;
13
14         hFile = CreateFile(".\\dump.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
15         if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
16         {
17                 dump = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
18                         (MINIDUMP_TYPE)
19                         (MiniDumpWithIndirectlyReferencedMemory
20                         |MiniDumpWithPrivateReadWriteMemory
21                         |MiniDumpWithThreadInfo
22                         |MiniDumpWithUnloadedModules),
23                         &minidumpInfo, NULL, NULL);
24                 CloseHandle(hFile);
25         }
26
27
28         // dump peercast's log
29         fs.openWriteReplace(".\\dump.html");
30         sys->logBuf->dumpHTML(fs);
31         fs.close();
32         if (dump)
33         {
34                 MessageBox(NULL, "\88ê\94Ê\95Û\8cì\88á\94½\82Ì\88×\81A\83v\83\8d\83O\83\89\83\80\82Í\8b­\90§\8fI\97¹\82³\82ê\82Ü\82·\81B\n"
35                         "\96â\91è\89ð\8c\88\82Ì\82½\82ß\83_\83\93\83v\83f\81[\83^(dump.html, dump.dmp)\82ð\92ñ\8b\9f\82µ\82Ä\82­\82¾\82³\82¢\81B", "SEH",
36                         MB_OK|MB_ICONWARNING);
37         } else
38         {
39                 MessageBox(NULL, "\88ê\94Ê\95Û\8cì\88á\94½\82Ì\88×\81A\83v\83\8d\83O\83\89\83\80\82Í\8b­\90§\8fI\97¹\82³\82ê\82Ü\82·\81B\n"
40                         "\96â\91è\89ð\8c\88\82Ì\82½\82ß\82É\83_\83\93\83v\83f\81[\83^(dump.html)\82ð\92ñ\8b\9f\82µ\82Ä\82­\82¾\82³\82¢\81B", "SEH",
41                         MB_OK|MB_ICONWARNING);
42         }
43
44         ::exit(lpExcept->ExceptionRecord->ExceptionCode);
45 }