]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/crashrpt.cpp
1. derive wxGTK wxRadioBox from wxRadioBoxBase now, as in all other ports
[wxWidgets.git] / src / msw / crashrpt.cpp
index 9edcd4524d061eeff26c7f044997319c82b6764a..3d68e175d082471e0297a051d642125855c237a0 100644 (file)
@@ -195,7 +195,14 @@ bool wxCrashReportImpl::Generate(int flags, EXCEPTION_POINTERS *ep)
         }
         else // minimal dump
         {
-            dumpFlags = MiniDumpNormal;
+            // the file size is not much bigger than when using MiniDumpNormal
+            // if we use the flags below, but the minidump is much more useful
+            // as it contains the values of many (but not all) local variables
+            dumpFlags = (MINIDUMP_TYPE)(MiniDumpScanMemory
+#if _MSC_VER > 1300
+                                        |MiniDumpWithIndirectlyReferencedMemory
+#endif                                        
+                                        );
         }
 
         if ( !wxDbgHelpDLL::MiniDumpWriteDump
@@ -222,6 +229,7 @@ bool wxCrashReportImpl::Generate(int flags, EXCEPTION_POINTERS *ep)
     }
 #else // !wxUSE_DBGHELP
     wxUnusedVar(flags);
+    wxUnusedVar(ep);
 
     Output(_T("Support for crash report generation was not included ")
            _T("in this wxWidgets version."));
@@ -255,6 +263,24 @@ bool wxCrashReport::Generate(int flags, EXCEPTION_POINTERS *ep)
     return impl.Generate(flags, ep);
 }
 
+/* static */
+bool wxCrashReport::GenerateNow(int flags)
+{
+    bool rc = false;
+
+    __try
+    {
+        RaiseException(0x1976, 0, 0, NULL);
+    }
+    __except( rc = Generate(flags, (EXCEPTION_POINTERS *)GetExceptionInformation()),
+              EXCEPTION_CONTINUE_EXECUTION )
+    {
+        // never executed because of EXCEPTION_CONTINUE_EXECUTION above
+    }
+
+    return rc;
+}
+
 // ----------------------------------------------------------------------------
 // wxCrashContext
 // ----------------------------------------------------------------------------