X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/83dee24ca2b182a77740d33abf72b833e647bcd5..1794103babb9da5387ff71b43f3bd0aa6d2413e2:/src/msw/crashrpt.cpp diff --git a/src/msw/crashrpt.cpp b/src/msw/crashrpt.cpp index 9edcd4524d..3d68e175d0 100644 --- a/src/msw/crashrpt.cpp +++ b/src/msw/crashrpt.cpp @@ -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 // ----------------------------------------------------------------------------