|
|
@@ -0,0 +1,71 @@
|
|
|
+#include "../pch/pch.h"
|
|
|
+#include "CExceptionDmp.h"
|
|
|
+
|
|
|
+#include <Dbghelp.h>
|
|
|
+
|
|
|
+static CExceptionDmp s_ExceptionDmp;
|
|
|
+
|
|
|
+LONG WINAPI MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExInfo)
|
|
|
+{
|
|
|
+ wstring wsPath = CSystem::GetProgramDir() + L"\\dump\\";
|
|
|
+ if (!CSystem::IsDirExist(wsPath))
|
|
|
+ {
|
|
|
+ bool flag = CreateDirectory(wsPath.c_str(), NULL);
|
|
|
+ if (flag == false)
|
|
|
+ {
|
|
|
+ LOG_INFO("新建 dump 目录失败!");
|
|
|
+ }
|
|
|
+
|
|
|
+ LOG_INFO("新建 dump 目录成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ SYSTEMTIME tm;
|
|
|
+ GetLocalTime(&tm);//获取时间
|
|
|
+ TCHAR file_name[128];
|
|
|
+
|
|
|
+ _stprintf_s(file_name, L"%s%d-%02d-%02d-%02d-%02d-%02d.dmp", wsPath.c_str(),
|
|
|
+ tm.wYear, tm.wMonth, tm.wDay, tm.wHour, tm.wMinute, tm.wSecond);//设置dmp文件名称
|
|
|
+
|
|
|
+ HANDLE hFile = CreateFile(file_name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
|
|
|
+ FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
+ if (hFile != INVALID_HANDLE_VALUE)
|
|
|
+ {
|
|
|
+ MINIDUMP_EXCEPTION_INFORMATION info;//构造dmp异常数据结构
|
|
|
+ info.ThreadId = GetCurrentThreadId();
|
|
|
+ info.ClientPointers = FALSE;
|
|
|
+ info.ExceptionPointers = pExInfo;
|
|
|
+ MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
|
|
|
+ (MINIDUMP_TYPE)MiniDumpNormal, &info, NULL, NULL);//写dmp文件
|
|
|
+ CloseHandle(hFile);
|
|
|
+
|
|
|
+ const TCHAR *fmt =
|
|
|
+ {
|
|
|
+ L"程序遇到问题需要关闭,\n\n"
|
|
|
+ L"我们对此引起的不便表示抱歉,请将\n\n"
|
|
|
+ L"\"%s\"\n\n"
|
|
|
+ L"发送给我们以便快速查找问题之所在,谢谢。\n\n"
|
|
|
+ L"请联系您的乐外卖售后经理,提交该文件\n\n"
|
|
|
+ L"或前往官网联系官方客服:www.lewaimai.com"
|
|
|
+ };
|
|
|
+ TCHAR msg[400];
|
|
|
+ _stprintf_s(msg, fmt, file_name);
|
|
|
+ MessageBox(NULL, msg, L"程序异常报告", MB_ICONERROR | MB_SYSTEMMODAL);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TCHAR info[300] = { L"fail to create dump file:" };
|
|
|
+ _tcscat(info, file_name);
|
|
|
+ MessageBox(NULL, info, L"dump", MB_ICONERROR | MB_SYSTEMMODAL);
|
|
|
+ }
|
|
|
+ return EXCEPTION_EXECUTE_HANDLER;
|
|
|
+}
|
|
|
+
|
|
|
+CExceptionDmp::CExceptionDmp()
|
|
|
+{
|
|
|
+ SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+CExceptionDmp::~CExceptionDmp()
|
|
|
+{
|
|
|
+}
|