X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/50bea100324dcbeebf400eb65869fd4eae476171..7c11806499166993dffcbb99139d5b248a2c6c82:/include/wx/msw/crashrpt.h diff --git a/include/wx/msw/crashrpt.h b/include/wx/msw/crashrpt.h index 97a5e4359a..6e7b725512 100644 --- a/include/wx/msw/crashrpt.h +++ b/include/wx/msw/crashrpt.h @@ -5,19 +5,21 @@ // Modified by: // Created: 13.07.2003 // RCS-ID: $Id$ -// Copyright: (c) 2003 Vadim Zeitlin +// Copyright: (c) 2003 Vadim Zeitlin // 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 @@ -26,16 +28,62 @@ enum wxCRASH_REPORT_LOCATION = 0, // if this flag is given, the call stack is dumped + // + // this results in dump/crash report as small as possible, this is the + // default flag wxCRASH_REPORT_STACK = 1, // if this flag is given, the values of the local variables are dumped + // + // 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 // - // WARNING: this may take a very long time and generate megabytes of output - // in a big program, this is why it is off by default - 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; }; // ---------------------------------------------------------------------------- @@ -53,12 +101,20 @@ struct WXDLLIMPEXP_BASE wxCrashReport // 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 | - wxCRASH_REPORT_LOCALS); + // + // 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_