void OutputGlobals(HANDLE hModuleCrash);
- // the handle of the report file
- HANDLE m_hFile;
-
// the current stack frame (may be NULL)
STACKFRAME *m_sfCurrent;
DECLARE_SYM_FUNCTION(SymEnumSymbols);
DECLARE_SYM_FUNCTION(SymGetTypeInfo);
#endif // wxUSE_DBGHELP
+
+ // the handle of the report file
+ HANDLE m_hFile;
};
// ----------------------------------------------------------------------------
{
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;
}
{
wxString s;
+ // avoid infinite recursion
+ if ( level > 10 )
+ {
+ return s;
+ }
+
const HANDLE hProcess = GetCurrentProcess();
DWORD dwTag = 0;
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;
}
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; \
}
#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;
{
if ( ResolveSymFunctions(dllDbgHelp) )
{
- SymSetOptions(SYMOPT_DEFERRED_LOADS);
+ SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_UNDNAME);
// Initialize DbgHelp
if ( SymInitialize(GetCurrentProcess(), NULL, TRUE /* invade */) )
}
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
_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 ")
);
wxStrncat(gs_reportFilename, fname,
- WXSIZEOF(gs_reportFilename) - strlen(gs_reportFilename) - 1);
+ WXSIZEOF(gs_reportFilename) - wxStrlen(gs_reportFilename) - 1);
}
return true;
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;