1/////////////////////////////////////////////////////////////////////////////// 2// Name: wx/msw/crashrpt.h 3// Purpose: helpers for the structured exception handling (SEH) under Win32 4// Author: Vadim Zeitlin 5// Modified by: 6// Created: 13.07.2003 7// RCS-ID: $Id: crashrpt.h 34436 2005-05-31 09:20:43Z JS $ 8// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> 9// Licence: wxWindows licence 10/////////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_MSW_CRASHRPT_H_ 13#define _WX_MSW_CRASHRPT_H_ 14 15#include "wx/defs.h" 16 17#if wxUSE_CRASHREPORT 18 19struct _EXCEPTION_POINTERS; 20 21// ---------------------------------------------------------------------------- 22// crash report generation flags 23// ---------------------------------------------------------------------------- 24 25enum 26{ 27 // we always report where the crash occurred 28 wxCRASH_REPORT_LOCATION = 0, 29 30 // if this flag is given, the call stack is dumped 31 // 32 // this results in dump/crash report as small as possible, this is the 33 // default flag 34 wxCRASH_REPORT_STACK = 1, 35 36 // if this flag is given, the values of the local variables are dumped 37 // 38 // note that with the current implementation it requires dumping the full 39 // process address space and so this will result in huge dump file and will 40 // take some time to generate 41 // 42 // it's probably not a good idea to use this by default, start with default 43 // mini dump and ask your users to set WX_CRASH_FLAGS environment variable 44 // to 2 or 4 if you need more information in the dump 45 wxCRASH_REPORT_LOCALS = 2, 46 47 // if this flag is given, the values of all global variables are dumped 48 // 49 // this creates a much larger mini dump than just wxCRASH_REPORT_STACK but 50 // still much smaller than wxCRASH_REPORT_LOCALS one 51 wxCRASH_REPORT_GLOBALS = 4, 52 53 // default is to create the smallest possible crash report 54 wxCRASH_REPORT_DEFAULT = wxCRASH_REPORT_LOCATION | wxCRASH_REPORT_STACK 55}; 56 57// ---------------------------------------------------------------------------- 58// wxCrashContext: information about the crash context 59// ---------------------------------------------------------------------------- 60 61struct WXDLLIMPEXP_BASE wxCrashContext 62{ 63 // initialize this object with the given information or from the current 64 // global exception info which is only valid inside wxApp::OnFatalException 65 wxCrashContext(_EXCEPTION_POINTERS *ep = NULL); 66 67 // get the name for this exception code 68 wxString GetExceptionString() const; 69 70 71 // exception code 72 size_t code; 73 74 // exception address 75 void *addr; 76 77 // machine-specific registers vaues 78 struct 79 { 80#ifdef __INTEL__ 81 wxInt32 eax, ebx, ecx, edx, esi, edi, 82 ebp, esp, eip, 83 cs, ds, es, fs, gs, ss, 84 flags; 85#endif // __INTEL__ 86 } regs; 87}; 88 89// ---------------------------------------------------------------------------- 90// wxCrashReport: this class is used to create crash reports 91// ---------------------------------------------------------------------------- 92 93struct WXDLLIMPEXP_BASE wxCrashReport 94{ 95 // set the name of the file to which the report is written, it is 96 // constructed from the .exe name by default 97 static void SetFileName(const wxChar *filename); 98 99 // return the current file name 100 static const wxChar *GetFileName(); 101 102 // write the exception report to the file, return true if it could be done 103 // or false otherwise 104 // 105 // if ep pointer is NULL, the global exception info which is valid only 106 // inside wxApp::OnFatalException() is used 107 static bool Generate(int flags = wxCRASH_REPORT_DEFAULT, 108 _EXCEPTION_POINTERS *ep = NULL); 109 110 111 // generate a crash report from outside of wxApp::OnFatalException(), this 112 // can be used to take "snapshots" of the program in wxApp::OnAssert() for 113 // example 114 static bool GenerateNow(int flags = wxCRASH_REPORT_DEFAULT); 115}; 116 117#endif // wxUSE_CRASHREPORT 118 119#endif // _WX_MSW_CRASHRPT_H_ 120 121