OSDN Git Service

Add Show "No Merge" and "First Parent Only" Option at Show ALL menu button
[tortoisegit/TortoiseGitJp.git] / src / crashrpt / excprpt.h
1 ///////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 //  Module: excprpt.h\r
4 //\r
5 //    Desc: This class generates the dump and xml overview files.\r
6 //\r
7 // Copyright (c) 2003 Michael Carruth\r
8 //\r
9 ///////////////////////////////////////////////////////////////////////////////\r
10 \r
11 #pragma once\r
12 \r
13 #include <dbghelp.h>\r
14 // STL generates various warnings.\r
15 // 4100: unreferenced formal parameter\r
16 // 4663: C++ language change: to explicitly specialize class template...\r
17 // 4018: signed/unsigned mismatch\r
18 // 4245: conversion from <a> to <b>: signed/unsigned mismatch\r
19 #pragma warning(push, 3)\r
20 #pragma warning(disable: 4100)\r
21 #pragma warning(disable: 4663)\r
22 #pragma warning(disable: 4018)\r
23 #pragma warning(disable: 4245)\r
24 #include <vector>\r
25 #pragma warning(pop)\r
26 \r
27 // Import MSXML interfaces\r
28 #import "msxml6.dll" named_guids raw_interfaces_only\r
29 \r
30 //\r
31 // COM helper macros\r
32 //\r
33 #define CHECKHR(x) {HRESULT hr = x; if (FAILED(hr)) goto CleanUp;}\r
34 #define SAFERELEASE(p) {if (p) {(p)->Release(); p = NULL;}}\r
35 \r
36 \r
37 ////////////////////////////// Class Definitions /////////////////////////////\r
38 \r
39 // ===========================================================================\r
40 // CExceptionReport\r
41 // \r
42 // See the module comment at top of file.\r
43 //\r
44 class CExceptionReport  \r
45 {\r
46 public:\r
47         CExceptionReport(PEXCEPTION_POINTERS ExceptionInfo, BSTR message);\r
48 \r
49    string getSymbolFile(int index);\r
50         int getNumSymbolFiles();\r
51         string getCrashLog();\r
52         string getCrashFile();\r
53    string getModuleName() { return m_sModule; };\r
54    string getExceptionCode() { return m_sException; };\r
55    string getExceptionAddr() { return m_sAddress; };\r
56 \r
57 private:\r
58    string m_sCommandLine;\r
59    string m_sModule;\r
60    string m_sException;\r
61    string m_sAddress;\r
62 \r
63    PEXCEPTION_POINTERS m_excpInfo;\r
64    BSTR           m_message;\r
65    vector<string> m_symFiles;\r
66 \r
67    // used by stack walkback\r
68    MSXML2::IXMLDOMElement* m_stack_element;\r
69    MSXML2::IXMLDOMDocument* m_stack_doc;\r
70    int m_frameNumber;\r
71 \r
72    // used by exception node creation, symbol translations\r
73    MSXML2::IXMLDOMElement*  m_exception_element;\r
74 \r
75    // used by dump callback\r
76    std::vector<MINIDUMP_MODULE_CALLBACK>        m_modules;\r
77 \r
78    static void writeDumpFile(HANDLE file, PEXCEPTION_POINTERS m_excpInfo, void *data);\r
79 \r
80    MSXML2::IXMLDOMNode* CreateDOMNode(MSXML2::IXMLDOMDocument* pDoc, \r
81                                             int type, \r
82                                             BSTR bstrName);\r
83 \r
84    MSXML2::IXMLDOMNode* CreateExceptionRecordNode(MSXML2::IXMLDOMDocument* pDoc, \r
85                                                         EXCEPTION_RECORD* pExceptionRecord);\r
86    static void CreateExceptionSymbolAttributes(DWORD_PTR address, const char *ImageName,\r
87                                                                           const char *FunctionName, DWORD_PTR functionDisp,\r
88                                                                           const char *Filename, DWORD LineNumber, DWORD lineDisp,\r
89                                                                           void *data);\r
90 \r
91    MSXML2::IXMLDOMNode* CreateProcessorNode(MSXML2::IXMLDOMDocument* pDoc);\r
92 \r
93    MSXML2::IXMLDOMNode* CreateOSNode(MSXML2::IXMLDOMDocument* pDoc);\r
94 \r
95    MSXML2::IXMLDOMNode* CreateModulesNode(MSXML2::IXMLDOMDocument* pDoc);\r
96 \r
97    MSXML2::IXMLDOMNode* CreateMsgNode(MSXML2::IXMLDOMDocument* pDoc, BSTR message);\r
98 \r
99    MSXML2::IXMLDOMNode* CreateWalkbackNode(MSXML2::IXMLDOMDocument* pDoc, CONTEXT *pContext);\r
100 \r
101    static void CreateWalkbackEntryNode(DWORD_PTR address, const char *ImageName,\r
102                                                                           const char *FunctionName, DWORD_PTR functionDisp,\r
103                                                                           const char *Filename, DWORD LineNumber, DWORD lineDisp,\r
104                                                                           void *data);\r
105 \r
106    static BOOL CALLBACK miniDumpCallback(PVOID CallbackParam,\r
107                                          CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,\r
108                                          PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);\r
109 };\r
110 \r