DWORD cbWritten;
wxString s = wxString::FormatV(format, argptr);
- ::WriteFile(m_hFile, s, s.length() * sizeof(wxChar), &cbWritten, 0);
+
+ wxCharBuffer buf(s.mb_str(wxConvUTF8));
+ ::WriteFile(m_hFile, buf.data(), strlen(buf.data()), &cbWritten, 0);
va_end(argptr);
}
}
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
}
#else // !wxUSE_DBGHELP
wxUnusedVar(flags);
+ wxUnusedVar(ep);
Output(_T("Support for crash report generation was not included ")
_T("in this wxWidgets version."));
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
// ----------------------------------------------------------------------------