]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/crashrpt.h
winundef.h serves for other compilators too with STL turned on.
[wxWidgets.git] / include / wx / msw / crashrpt.h
index 97a5e4359ade9c249560a38937cbedc8d35d29bd..6e7b725512f9e4fd65e10386c53b62d78b852f18 100644 (file)
@@ -5,19 +5,21 @@
 // Modified by:
 // Created:     13.07.2003
 // RCS-ID:      $Id$
-// Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
+// Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
 // 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_