X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..438959cca892a7651634cc3a7aad4819ac49b23c:/include/wx/msw/crashrpt.h diff --git a/include/wx/msw/crashrpt.h b/include/wx/msw/crashrpt.h index bbd3dcc263..6ee6e75205 100644 --- a/include/wx/msw/crashrpt.h +++ b/include/wx/msw/crashrpt.h @@ -9,20 +9,22 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifndef _WX_MSW_SEH_H_ -#define _WX_MSW_SEH_H_ +#ifndef _WX_MSW_CRASHRPT_H_ +#define _WX_MSW_CRASHRPT_H_ #include "wx/defs.h" -#if wxUSE_ON_FATAL_EXCEPTION +#if wxUSE_CRASHREPORT + +struct _EXCEPTION_POINTERS; // ---------------------------------------------------------------------------- -// report generation flags +// crash report generation flags // ---------------------------------------------------------------------------- enum { - // we always report where the crash occured + // we always report where the crash occurred wxCRASH_REPORT_LOCATION = 0, // if this flag is given, the call stack is dumped @@ -33,15 +35,55 @@ enum // if this flag is given, the values of the local variables are dumped // - // note that this will result in huge file containing the dump of the - // entire process memory space when using mini dumps! + // note that with the current implementation it requires dumping the full + // process address space and so this will result in huge dump file and will + // take some time to generate + // + // it's probably not a good idea to use this by default, start with default + // mini dump and ask your users to set WX_CRASH_FLAGS environment variable + // to 2 or 4 if you need more information in the dump wxCRASH_REPORT_LOCALS = 2, // if this flag is given, the values of all global variables are dumped // - // this creates a much larger mini dump and also takes more time to - // generate if our own crash reporting code is used - wxCRASH_REPORT_GLOBALS = 4 + // this creates a much larger mini dump than just wxCRASH_REPORT_STACK but + // still much smaller than wxCRASH_REPORT_LOCALS one + wxCRASH_REPORT_GLOBALS = 4, + + // default is to create the smallest possible crash report + wxCRASH_REPORT_DEFAULT = wxCRASH_REPORT_LOCATION | wxCRASH_REPORT_STACK +}; + +// ---------------------------------------------------------------------------- +// wxCrashContext: information about the crash context +// ---------------------------------------------------------------------------- + +struct WXDLLIMPEXP_BASE wxCrashContext +{ + // initialize this object with the given information or from the current + // global exception info which is only valid inside wxApp::OnFatalException + wxCrashContext(_EXCEPTION_POINTERS *ep = NULL); + + // get the name for this exception code + wxString GetExceptionString() const; + + + // exception code + size_t code; + + // exception address + void *addr; + + // machine-specific registers vaues + struct + { +#ifdef __INTEL__ + wxInt32 eax, ebx, ecx, edx, esi, edi, + ebp, esp, eip, + cs, ds, es, fs, gs, ss, + flags; +#endif // __INTEL__ + } regs; }; // ---------------------------------------------------------------------------- @@ -52,18 +94,27 @@ struct WXDLLIMPEXP_BASE wxCrashReport { // set the name of the file to which the report is written, it is // constructed from the .exe name by default - static void SetFileName(const wxChar *filename); + static void SetFileName(const wxString& filename); // return the current file name - static const wxChar *GetFileName(); + static wxString GetFileName(); // write the exception report to the file, return true if it could be done // or false otherwise - static bool Generate(int flags = wxCRASH_REPORT_LOCATION | - wxCRASH_REPORT_STACK); + // + // if ep pointer is NULL, the global exception info which is valid only + // inside wxApp::OnFatalException() is used + static bool Generate(int flags = wxCRASH_REPORT_DEFAULT, + _EXCEPTION_POINTERS *ep = NULL); + + + // generate a crash report from outside of wxApp::OnFatalException(), this + // can be used to take "snapshots" of the program in wxApp::OnAssert() for + // example + static bool GenerateNow(int flags = wxCRASH_REPORT_DEFAULT); }; -#endif // wxUSE_ON_FATAL_EXCEPTION +#endif // wxUSE_CRASHREPORT -#endif // _WX_MSW_SEH_H_ +#endif // _WX_MSW_CRASHRPT_H_