Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
244 chris 1
#ifndef __SEHCATHER_H__
2
#define __SEHCATHER_H__
3
 
4
#include "Common.h"
5
#include "HTTPTransfer.h"
6
#include <imagehlp.h>
7
 
8
namespace Sexy
9
{
10
 
11
class SexyAppBase;
12
 
13
typedef BOOL (__stdcall * SYMINITIALIZEPROC)(HANDLE, LPSTR, BOOL);
14
 
15
typedef DWORD (__stdcall *SYMSETOPTIONSPROC)(DWORD);
16
 
17
typedef BOOL (__stdcall *SYMCLEANUPPROC)(HANDLE);
18
 
19
typedef LPCSTR (__stdcall *UNDECORATESYMBOLNAMEPROC)(LPCSTR, LPSTR, DWORD, DWORD);
20
 
21
typedef BOOL (__stdcall * STACKWALKPROC)
22
           ( DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID,
23
            PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE,
24
            PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
25
 
26
typedef LPVOID (__stdcall *SYMFUNCTIONTABLEACCESSPROC)(HANDLE, DWORD);
27
 
28
typedef DWORD (__stdcall *SYMGETMODULEBASEPROC)(HANDLE, DWORD);
29
 
30
typedef BOOL (__stdcall *SYMGETSYMFROMADDRPROC)(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
31
 
32
class SEHCatcher
33
{
34
public:
35
        static SexyAppBase*             mApp;
36
        static HFONT                    mDialogFont;
37
        static HFONT                    mBoldFont;
38
        static HWND                             mYesButtonWindow;
39
        static HWND                             mNoButtonWindow;
40
        static HWND                             mDebugButtonWindow;
41
        static HWND                             mEditWindow;
42
        static bool                             mHasDemoFile;
43
        static bool                             mDebugError;
44
        static std::string              mErrorTitle;
45
        static std::string              mErrorText;
46
        static std::string              mUserText;
47
        static std::string              mUploadFileName;
48
        static std::wstring             mCrashMessage;
49
        static std::string              mSubmitHost;
50
        static std::wstring             mSubmitErrorMessage;
51
        static std::wstring             mSubmitMessage;
52
        static HMODULE                  mImageHelpLib;
53
        static SYMINITIALIZEPROC mSymInitialize;
54
        static SYMSETOPTIONSPROC mSymSetOptions;
55
        static UNDECORATESYMBOLNAMEPROC mUnDecorateSymbolName;
56
        static SYMCLEANUPPROC   mSymCleanup;
57
        static STACKWALKPROC    mStackWalk;
58
        static SYMFUNCTIONTABLEACCESSPROC mSymFunctionTableAccess;
59
        static SYMGETMODULEBASEPROC mSymGetModuleBase;
60
        static SYMGETSYMFROMADDRPROC mSymGetSymFromAddr;
61
        static HTTPTransfer             mSubmitReportTransfer;
62
        static bool                             mExiting;
63
        static bool                             mShowUI;
64
        static bool                             mAllowSubmit;
65
 
66
protected:
67
        static LPTOP_LEVEL_EXCEPTION_FILTER mPreviousFilter;
68
 
69
public:
70
        static void                             SubmitReportThread(void *theArg);
71
 
72
        static LRESULT CALLBACK SEHWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
73
        static LRESULT CALLBACK SubmitInfoWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
74
        static long __stdcall   UnhandledExceptionFilter(LPEXCEPTION_POINTERS lpExceptPtr);    
75
        static void                             DoHandleDebugEvent(LPEXCEPTION_POINTERS lpEP);
76
        static bool                             GetLogicalAddress(void* addr, char* szModule, DWORD len, DWORD& section, DWORD& offset);
77
        static std::string              GetFilename(const std::string& thePath);
78
        static void                             WriteToFile(const std::string& theErrorText);
79
        static void                             ShowSubmitInfoDialog();
80
        static void                             ShowErrorDialog(const std::string& theErrorTitle, const std::string& theErrorText);    
81
        static bool                             LoadImageHelp();
82
        static void                             UnloadImageHelp();
83
        static std::string              IntelWalk(PCONTEXT theContext, int theSkipCount);
84
        static std::string              ImageHelpWalk(PCONTEXT theContext, int theSkipCount);
85
        static std::string              GetSysInfo();
86
        static void                             GetSymbolsFromMapFile(std::string &theDebugDump);
87
 
88
public:
89
        SEHCatcher();
90
        ~SEHCatcher();
91
};
92
 
93
extern SEHCatcher gSEHCatcher;
94
 
95
}
96
 
97
#endif