X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47e94dedd98826720437695345e96a7c2a94a5d4..d8c89c487d47c0f5a9c4a3cfe2010f04d54939f5:/src/msw/crashrpt.cpp?ds=sidebyside diff --git a/src/msw/crashrpt.cpp b/src/msw/crashrpt.cpp index 7662ab0779..2b0e276cef 100644 --- a/src/msw/crashrpt.cpp +++ b/src/msw/crashrpt.cpp @@ -130,7 +130,9 @@ void wxCrashReportImpl::Output(const wxChar *format, ...) 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); } @@ -195,7 +197,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 @@ -218,10 +227,11 @@ bool wxCrashReportImpl::Generate(int flags, EXCEPTION_POINTERS *ep) } else // dbghelp.dll couldn't be loaded { - Output(wxDbgHelpDLL::GetErrorMessage()); + Output(_T("%s"), wxDbgHelpDLL::GetErrorMessage().c_str()); } #else // !wxUSE_DBGHELP wxUnusedVar(flags); + wxUnusedVar(ep); Output(_T("Support for crash report generation was not included ") _T("in this wxWidgets version.")); @@ -235,14 +245,13 @@ bool wxCrashReportImpl::Generate(int flags, EXCEPTION_POINTERS *ep) // ---------------------------------------------------------------------------- /* static */ -void wxCrashReport::SetFileName(const wxChar *filename) +void wxCrashReport::SetFileName(const wxString& filename) { - wxStrncpy(gs_reportFilename, filename, WXSIZEOF(gs_reportFilename) - 1); - gs_reportFilename[WXSIZEOF(gs_reportFilename) - 1] = _T('\0'); + wxStrlcpy(gs_reportFilename, filename.wx_str(), WXSIZEOF(gs_reportFilename)); } /* static */ -const wxChar *wxCrashReport::GetFileName() +wxString wxCrashReport::GetFileName() { return gs_reportFilename; }