Jelajahi Sumber

增加dump调试功能

张洋 5 tahun lalu
induk
melakukan
bdd48f4044

+ 1 - 1
bin/Win32/Release/setup/乐外卖接单软件安装脚本.nsi

@@ -2,7 +2,7 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "乐外卖接单软件"
-!define PRODUCT_VERSION "1.0.2.0"
+!define PRODUCT_VERSION "1.0.2.1"
 !define PRODUCT_PUBLISHER "深圳市迅享科技有限公司"
 !define PRODUCT_WEB_SITE "https://www.lewaimai.com"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"

TEMPAT SAMPAH
dump/1.0.2.1/lewaimai_pos_windows.exe


TEMPAT SAMPAH
dump/1.0.2.1/lewaimai_pos_windows.iobj


TEMPAT SAMPAH
dump/1.0.2.1/lewaimai_pos_windows.ipdb


TEMPAT SAMPAH
dump/1.0.2.1/lewaimai_pos_windows.pdb


+ 2 - 0
lewaimai_pos_windows/lewaimai_pos_windows.vcxproj

@@ -227,6 +227,7 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="tool\CExceptionDmp.h" />
     <ClInclude Include="helper\CBitmapHelper.h" />
     <ClInclude Include="tool\CComHelper.h" />
     <ClInclude Include="wnd\CMessageboxWnd.h" />
@@ -259,6 +260,7 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="control\OrderListUI.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="tool\CExceptionDmp.cpp" />
     <ClCompile Include="helper\CBitmapHelper.cpp" />
     <ClCompile Include="tool\CComHelper.cpp" />
     <ClCompile Include="wnd\CMessageboxWnd.cpp" />

+ 6 - 0
lewaimai_pos_windows/lewaimai_pos_windows.vcxproj.filters

@@ -105,6 +105,9 @@
     <ClInclude Include="helper\CBitmapHelper.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="tool\CExceptionDmp.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -188,6 +191,9 @@
     <ClCompile Include="helper\CBitmapHelper.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="tool\CExceptionDmp.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\lewaimai.ico">

TEMPAT SAMPAH
lewaimai_pos_windows/resource/lewaimai_pos_windows.aps


TEMPAT SAMPAH
lewaimai_pos_windows/resource/lewaimai_pos_windows.rc


+ 71 - 0
lewaimai_pos_windows/tool/CExceptionDmp.cpp

@@ -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()
+{
+}

+ 9 - 0
lewaimai_pos_windows/tool/CExceptionDmp.h

@@ -0,0 +1,9 @@
+#pragma once
+
+class CExceptionDmp
+{
+public:
+	CExceptionDmp();
+	~CExceptionDmp();
+};
+