1 ///////////////////////////////////////////////////////////////////////////////
\r
5 // Desc: This class generates the dump and xml overview files.
\r
7 // Copyright (c) 2003 Michael Carruth
\r
9 ///////////////////////////////////////////////////////////////////////////////
\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
25 #pragma warning(pop)
\r
27 // Import MSXML interfaces
\r
28 #import "msxml6.dll" named_guids raw_interfaces_only
\r
31 // COM helper macros
\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
37 ////////////////////////////// Class Definitions /////////////////////////////
\r
39 // ===========================================================================
\r
42 // See the module comment at top of file.
\r
44 class CExceptionReport
\r
47 CExceptionReport(PEXCEPTION_POINTERS ExceptionInfo, BSTR message);
\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
58 string m_sCommandLine;
\r
60 string m_sException;
\r
63 PEXCEPTION_POINTERS m_excpInfo;
\r
65 vector<string> m_symFiles;
\r
67 // used by stack walkback
\r
68 MSXML2::IXMLDOMElement* m_stack_element;
\r
69 MSXML2::IXMLDOMDocument* m_stack_doc;
\r
72 // used by exception node creation, symbol translations
\r
73 MSXML2::IXMLDOMElement* m_exception_element;
\r
75 // used by dump callback
\r
76 std::vector<MINIDUMP_MODULE_CALLBACK> m_modules;
\r
78 static void writeDumpFile(HANDLE file, PEXCEPTION_POINTERS m_excpInfo, void *data);
\r
80 MSXML2::IXMLDOMNode* CreateDOMNode(MSXML2::IXMLDOMDocument* pDoc,
\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
91 MSXML2::IXMLDOMNode* CreateProcessorNode(MSXML2::IXMLDOMDocument* pDoc);
\r
93 MSXML2::IXMLDOMNode* CreateOSNode(MSXML2::IXMLDOMDocument* pDoc);
\r
95 MSXML2::IXMLDOMNode* CreateModulesNode(MSXML2::IXMLDOMDocument* pDoc);
\r
97 MSXML2::IXMLDOMNode* CreateMsgNode(MSXML2::IXMLDOMDocument* pDoc, BSTR message);
\r
99 MSXML2::IXMLDOMNode* CreateWalkbackNode(MSXML2::IXMLDOMDocument* pDoc, CONTEXT *pContext);
\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
106 static BOOL CALLBACK miniDumpCallback(PVOID CallbackParam,
\r
107 CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,
\r
108 PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
\r