DragonNest/Common/BugReporter/BugReporter.h

186 lines
5.4 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
#include "SystemInfo.h"
#include "RyeolHttpClient.h"
#include "../Utility/AssertX.h"
#include "../Utility/CriticalSection.h"
#include <vector>
using namespace Ryeol;
class ExceptionCallback
{
public:
virtual void OnException(_EXCEPTION_POINTERS* pExceptionInfo) { }
};
/*
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
class BugReporter
{
public:
enum DumpLevel
{
eMiniDumpNormal = 0,
eMiniDumpWithDataSegs = 1,
eMiniDumpWithFullMemory = 2,
};
struct ReportingServerInfo
{
ReportingServerInfo()
{
// kb <20><><EFBFBD><EFBFBD>
nMaxReportSize = 20000; // <20><EFBFBD><E2BABB> 20<32>ް<EFBFBD> <20><><EFBFBD><EFBFBD>
#if defined(_CH)
szViewServerURL = "";//"http://116.211.21.173/ReportList.aspx";
szServerURL = "http://116.211.21.173/BugReport/BugProcess.aspx";
szSIDURL = "http://116.211.21.173/BugReport/dumpprocess.aspx";
// #elif defined(_JP)
// szViewServerURL = "";
// szServerURL = "bugreport.hangame.co.jp/BugProcess.aspx";
// szSIDURL = "bugreport.hangame.co.jp/dumpprocess.aspx";
// #elif defined(_TW)
// szViewServerURL = "";
// szServerURL = "http://112.121.85.5/BugTrace.aspx";
// szSIDURL = "http://112.121.85.5/dumpprocess.aspx";
// #elif defined(_US)
// szViewServerURL = "";
// szServerURL = "http://208.85.111.192/BugProcess.aspx";
// szSIDURL = "http://208.85.111.192/dumpprocess.aspx";
// #elif defined(_SG)
// szViewServerURL = "";
// szServerURL = "http://bugrpt.dn.cherrycredits.com/BugProcess.aspx";
// szSIDURL = "http://bugrpt.dn.cherrycredits.com/dumpprocess.aspx";
#elif defined(_KRAZ)
szViewServerURL = "";
szServerURL = "http://61.251.164.138/BugProcess.aspx"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD>
szSIDURL = "http://61.251.164.138/BugReport/dumpprocess.aspx"; //<2F><><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> <20>߻<EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD> üũ<C3BC>ϴ°<CFB4>
#else
szViewServerURL = "";
szServerURL = "";
szSIDURL = "";
#endif
szNoticeMsg = L"";
bUseAutoView = false;
bSaveLocal = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ忡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>.
bUseConfirm = false;
hWnd = NULL;
hAppIcon = 0;
hInst = 0;
}
std::string szServerURL;
std::string szViewServerURL;
std::string szSIDURL;
std::wstring szAppName;
std::wstring szNoticeTitle;
std::wstring szNoticeMsg;
std::wstring szSendButtonStr;
std::wstring szNotSendButtonStr;
HICON hAppIcon;
DWORD nMaxReportSize;
bool bUseAutoView; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bSaveLocal; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ忡 <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD>
bool bUseConfirm; // <20><><EFBFBD><EFBFBD><EEBAB8> <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD>
HWND hWnd;
HINSTANCE hInst;
bool bEnableReporting; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
BugReporter();
virtual ~BugReporter();
// <20><><EFBFBD>׸<EFBFBD><D7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> url
void SetReportingServerInfo(ReportingServerInfo& info)
{
m_ReportHttpInfo = info;
}
ReportingServerInfo& GetReportingServerInfo() { return m_ReportHttpInfo; }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD>
void SetBuildVersion(std::string& szBuildVersion) { m_szBuildVersion = szBuildVersion; }
/*
Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <EFBFBD>߰<EFBFBD><EFBFBD>ϱ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
ex )
std::string g_szUserNickname;
BugReporter.AddDebugData(&g_szUserNickname); // <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
g_szUserNickname <EFBFBD><EFBFBD> <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ϸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صд<EFBFBD>. UserNick = [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] UserGuild = [<EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>߻<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> UserDebugData <EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ش<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <EFBFBD>ִ<EFBFBD>.
*/
void AddDebugData(std::string* pStr) { m_UserDataArray.push_back(pStr); }
// <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20>α׸<CEB1> <20>־<EFBFBD><D6BE>д<EFBFBD>. <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> Ŀ<><C4BF><EFBFBD>Ƿ<EFBFBD> <20><> <20>ʿ<EFBFBD><CABF>ϰ<EFBFBD> <20>߿<EFBFBD><DFBF><EFBFBD> <20><><EFBFBD><20>α׷<CEB1> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
void AddLogA(char* fmt, ... );
void AttachCurrentTimeLog();
void AddLogW(WCHAR* fmt, ... );
void Enable(DumpLevel level = eMiniDumpWithDataSegs );
void Disable();
static DWORD WINAPI _StackOverflowException( LPVOID pParam );
static LONG __stdcall Exception_Minidump(_EXCEPTION_POINTERS* pExceptionInfo);
static void __cdecl DefaultBadAllocFilter();
long BugReport(_EXCEPTION_POINTERS* pExceptionInfo);
long MakeBugReportText(_EXCEPTION_POINTERS* pExceptionInfo);
long MakeDumpFile(_EXCEPTION_POINTERS* pExceptionInfo);
long HttpReporting();
long SIDReporting();
void SetSID( char *szSID );
void EnableCompressDump( bool bEnable ) { m_bEnableCompress = bEnable; }
void ConfirmDialog();
// <20>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>Ȳ<EFBFBD><C8B2> <20>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α׸<CEB1> <20>޾ƺ<DEBE><C6BA><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
long ForceReporting();
void SetExceptionCallBack(ExceptionCallback* pCallback) { m_pExceptionCallback = pCallback; }
private:
private:
int m_nDumpLevel;
bool m_bEnableDump;
bool m_bEnableCompress;
// <20>α׸<CEB1> <20><><EFBFBD>ܼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>ϸ鼭,, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5BFA1> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD>ȭ ó<><C3B3><EFBFBD><EFBFBD> <20><>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κе<CEBA>(BugReport()) <20><><EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5BFA1> <20><> <20><> <20>ְ<EFBFBD> <20>ȴٸ<C8B4> <20><><EFBFBD><EFBFBD>ȭ ó<><C3B3><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>.
CSyncLock m_LogLock;
bool m_bForceLogReporting;
static LPTOP_LEVEL_EXCEPTION_FILTER m_pExceptionFilter;
static _invalid_parameter_handler m_pInvalidParameterHandler;
static _purecall_handler m_pPureCallHandler;
SystemInfo m_SystemInfo;
std::string m_szProcessName;
std::string m_szBuildVersion;
std::string m_szUserLog;
std::string m_szReport;
std::string m_szStartTime;
std::string m_szReportingTime;
std::string m_szFileTime;
std::string m_szDumpFileName;
std::string m_szCompressDumpFileName;
std::string m_szReportFileName;
std::vector<std::string*> m_UserDataArray;
ReportingServerInfo m_ReportHttpInfo;
CHttpClientA m_HttpClient;
CHttpClientA m_HttpClientForSID;
ExceptionCallback* m_pExceptionCallback;
char m_szSID[256];
};
extern BugReporter gs_BugReporter;