X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f83aa7771cc31b8de34beb4dc32709799f6d2281..66b9ec3dab76aedfb19582dc82d793b65054e2ac:/src/msw/crashrpt.cpp?ds=inline diff --git a/src/msw/crashrpt.cpp b/src/msw/crashrpt.cpp index 10996846cd..9dd8850bb0 100644 --- a/src/msw/crashrpt.cpp +++ b/src/msw/crashrpt.cpp @@ -432,10 +432,10 @@ wxCrashReportImpl::FormatSimpleValue(BasicType bt, { static const size_t NUM_CHARS = 32; - const wxChar * const pc = *(PSTR *)pAddress; - if ( !::IsBadStringPtr(pc, NUM_CHARS) ) + const char * const pc = *(PSTR *)pAddress; + if ( !::IsBadStringPtrA(pc, NUM_CHARS) ) { - s << _T('"') << wxString(pc, NUM_CHARS) << _T('"'); + s << _T('"') << wxString(pc, wxConvLibc, NUM_CHARS) << _T('"'); handled = true; } @@ -494,6 +494,12 @@ wxCrashReportImpl::FormatField(DWORD64 modBase, { wxString s; + // avoid infinite recursion + if ( level > 10 ) + { + return s; + } + const HANDLE hProcess = GetCurrentProcess(); DWORD dwTag = 0; @@ -674,7 +680,9 @@ wxCrashReportImpl::FormatSymbol(PSYMBOL_INFO pSym, STACKFRAME *sf) pVariable = (DWORD_PTR)pSym->Address; } - s << pSym->Name << _T(" = ") << FormatAnyValue(pSym, (PVOID)pVariable); + s << wxString(pSym->Name, wxConvLibc) + << _T(" = ") + << FormatAnyValue(pSym, (PVOID)pVariable); return s; } @@ -916,10 +924,10 @@ void wxCrashReportImpl::OutputGlobals(HANDLE hModule) bool wxCrashReportImpl::ResolveSymFunctions(const wxDynamicLibrary& dllDbgHelp) { #define LOAD_SYM_FUNCTION(name) \ - name = (name ## _t) dllDbgHelp.GetSymbol(#name); \ + name = (name ## _t) dllDbgHelp.GetSymbol(_T(#name)); \ if ( !name ) \ { \ - Output(_T("\r\nFunction ") __XFILE__(#name) \ + Output(_T("\r\nFunction ") _T(#name) \ _T("() not found.\r\n")); \ return false; \ } @@ -997,7 +1005,14 @@ wxString wxCrashReportImpl::GetExceptionString(DWORD dwCode) #endif // wxUSE_DBGHELP -bool wxCrashReportImpl::Generate(int flags) +// Remove warning +#if wxUSE_DBGHELP +#define _WXUNUSED(x) x +#else +#define _WXUNUSED WXUNUSED +#endif + +bool wxCrashReportImpl::Generate(int _WXUNUSED(flags)) { if ( m_hFile == INVALID_HANDLE_VALUE ) return false; @@ -1020,7 +1035,7 @@ bool wxCrashReportImpl::Generate(int flags) { if ( ResolveSymFunctions(dllDbgHelp) ) { - SymSetOptions(SYMOPT_DEFERRED_LOADS); + SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_UNDNAME); // Initialize DbgHelp if ( SymInitialize(GetCurrentProcess(), NULL, TRUE /* invade */) ) @@ -1037,8 +1052,8 @@ bool wxCrashReportImpl::Generate(int flags) } else { - Output(_T("Please update your dbghelp.dll version, " - "at least version 5.1 is needed!\r\n")); + Output(_T("Please update your dbghelp.dll version, ") + _T("at least version 5.1 is needed!\r\n")); } } else @@ -1047,8 +1062,8 @@ bool wxCrashReportImpl::Generate(int flags) _T("from Microsoft to get more detailed crash information!")); } - Output(_T("\r\nLatest dbghelp.dll is available at " - "http://www.microsoft.com/whdc/ddk/debugging/\r\n")); + Output(_T("\r\nLatest dbghelp.dll is available at ") + _T("http://www.microsoft.com/whdc/ddk/debugging/\r\n")); #else // !wxUSE_DBGHELP Output(_T("Support for crash report generation was not included ") @@ -1118,7 +1133,7 @@ bool wxHandleFatalExceptions(bool doit) ); wxStrncat(gs_reportFilename, fname, - WXSIZEOF(gs_reportFilename) - strlen(gs_reportFilename) - 1); + WXSIZEOF(gs_reportFilename) - wxStrlen(gs_reportFilename) - 1); } return true; @@ -1132,7 +1147,16 @@ extern unsigned long wxGlobalSEHandler(EXCEPTION_POINTERS *pExcPtrs) wxGlobalSEInformation = pExcPtrs; // give the user a chance to do something special about this - wxTheApp->OnFatalException(); + __try + { + wxTheApp->OnFatalException(); + } + __except ( EXCEPTION_EXECUTE_HANDLER ) + { + // nothing to do here, just ignore the exception inside the + // exception handler + ; + } wxGlobalSEInformation = NULL;