X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3f49efdba9f219752121353c9430aabb6d679cf0..74a8f67d96591cec101def2a7d47c64072aff7fd:/src/msw/stackwalk.cpp diff --git a/src/msw/stackwalk.cpp b/src/msw/stackwalk.cpp index 212c2eda69..0002154583 100644 --- a/src/msw/stackwalk.cpp +++ b/src/msw/stackwalk.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/stackwalk.cpp +// Name: src/msw/stackwalk.cpp // Purpose: wxStackWalker implementation for Win32 // Author: Vadim Zeitlin // Modified by: @@ -68,7 +68,7 @@ void wxStackFrame::OnGetName() pSymbol ) ) { - wxDbgHelpDLL::LogError(_T("SymFromAddr")); + wxDbgHelpDLL::LogError(wxT("SymFromAddr")); return; } @@ -96,7 +96,7 @@ void wxStackFrame::OnGetLocation() { // it is normal that we don't have source info for some symbols, // notably all the ones from the system DLLs... - //wxDbgHelpDLL::LogError(_T("SymGetLineFromAddr")); + //wxDbgHelpDLL::LogError(wxT("SymGetLineFromAddr")); return; } @@ -161,7 +161,7 @@ void wxStackFrame::OnParam(PSYMBOL_INFO pSymInfo) BOOL CALLBACK EnumSymbolsProc(PSYMBOL_INFO pSymInfo, ULONG WXUNUSED(SymSize), PVOID data) { - wxStackFrame *frame = wx_static_cast(wxStackFrame *, data); + wxStackFrame *frame = static_cast(data); // we're only interested in parameters if ( pSymInfo->Flags & IMAGEHLP_SYMBOL_INFO_PARAMETER ) @@ -190,7 +190,7 @@ void wxStackFrame::OnGetParam() // address, this is not a real error if ( ::GetLastError() != ERROR_INVALID_ADDRESS ) { - wxDbgHelpDLL::LogError(_T("SymSetContext")); + wxDbgHelpDLL::LogError(wxT("SymSetContext")); } return; @@ -205,7 +205,7 @@ void wxStackFrame::OnGetParam() this // data to pass to it ) ) { - wxDbgHelpDLL::LogError(_T("SymEnumSymbols")); + wxDbgHelpDLL::LogError(wxT("SymEnumSymbols")); } } @@ -221,7 +221,7 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip, size_t maxDepth) // don't log a user-visible error message here because the stack trace // is only needed for debugging/diagnostics anyhow and we shouldn't // confuse the user by complaining that we couldn't generate it - wxLogDebug(_T("Failed to get stack backtrace: %s"), + wxLogDebug(wxT("Failed to get stack backtrace: %s"), wxDbgHelpDLL::GetErrorMessage().c_str()); return; } @@ -240,7 +240,7 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip, size_t maxDepth) TRUE // load symbols for all loaded modules ) ) { - wxDbgHelpDLL::LogError(_T("SymInitialize")); + wxDbgHelpDLL::LogError(wxT("SymInitialize")); return; } @@ -284,7 +284,7 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip, size_t maxDepth) ) ) { if ( ::GetLastError() ) - wxDbgHelpDLL::LogError(_T("StackWalk")); + wxDbgHelpDLL::LogError(wxT("StackWalk")); break; } @@ -300,14 +300,10 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip, size_t maxDepth) } } - // this results in crashes inside ntdll.dll when called from - // exception handler ... -#if 0 if ( !wxDbgHelpDLL::SymCleanup(hProcess) ) { - wxDbgHelpDLL::LogError(_T("SymCleanup")); + wxDbgHelpDLL::LogError(wxT("SymCleanup")); } -#endif } void wxStackWalker::WalkFrom(const _EXCEPTION_POINTERS *ep, size_t skip, size_t maxDepth) @@ -315,24 +311,28 @@ void wxStackWalker::WalkFrom(const _EXCEPTION_POINTERS *ep, size_t skip, size_t WalkFrom(ep->ContextRecord, skip, maxDepth); } +#if wxUSE_ON_FATAL_EXCEPTION + void wxStackWalker::WalkFromException(size_t maxDepth) { extern EXCEPTION_POINTERS *wxGlobalSEInformation; wxCHECK_RET( wxGlobalSEInformation, - _T("wxStackWalker::WalkFromException() can only be called from wxApp::OnFatalException()") ); + wxT("wxStackWalker::WalkFromException() can only be called from wxApp::OnFatalException()") ); // don't skip any frames, the first one is where we crashed WalkFrom(wxGlobalSEInformation, 0, maxDepth); } +#endif // wxUSE_ON_FATAL_EXCEPTION + void wxStackWalker::Walk(size_t skip, size_t WXUNUSED(maxDepth)) { // to get a CONTEXT for the current location, simply force an exception and // get EXCEPTION_POINTERS from it // // note: - // 1. we additionally skip RaiseException() and WalkFromException() frames + // 1. we additionally skip RaiseException() and WalkFrom() frames // 2. explicit cast to EXCEPTION_POINTERS is needed with VC7.1 even if it // shouldn't have been according to the docs __try @@ -342,7 +342,8 @@ void wxStackWalker::Walk(size_t skip, size_t WXUNUSED(maxDepth)) __except( WalkFrom((EXCEPTION_POINTERS *)GetExceptionInformation(), skip + 2), EXCEPTION_CONTINUE_EXECUTION ) { - // never executed because of WalkFromException() return value + // never executed because the above expression always evaluates to + // EXCEPTION_CONTINUE_EXECUTION } } @@ -399,9 +400,11 @@ wxStackWalker::WalkFrom(const _EXCEPTION_POINTERS * WXUNUSED(ep), { } +#if wxUSE_ON_FATAL_EXCEPTION void wxStackWalker::WalkFromException(size_t WXUNUSED(maxDepth)) { } +#endif // wxUSE_ON_FATAL_EXCEPTION void wxStackWalker::Walk(size_t WXUNUSED(skip), size_t WXUNUSED(maxDepth)) {