From 4db307e110e2559ac88fcad53bb2b7688240e29c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 14 Sep 2008 00:26:29 +0000 Subject: [PATCH] build fixes for wxUSE_ON_FATAL_EXCEPTION==0 (#9937) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55593 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/stackwalk.h | 2 ++ include/wx/stackwalk.h | 2 ++ include/wx/unix/stackwalk.h | 2 ++ src/common/debugrpt.cpp | 2 ++ src/msw/stackwalk.cpp | 11 +++++++++-- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/wx/msw/stackwalk.h b/include/wx/msw/stackwalk.h index a5f7e322ac..ad981d7b45 100644 --- a/include/wx/msw/stackwalk.h +++ b/include/wx/msw/stackwalk.h @@ -91,7 +91,9 @@ public: wxStackWalker(const char * WXUNUSED(argv0) = NULL) { } virtual void Walk(size_t skip = 1, size_t maxDepth = 200); +#if wxUSE_ON_FATAL_EXCEPTION virtual void WalkFromException(size_t maxDepth = 200); +#endif // wxUSE_ON_FATAL_EXCEPTION // enumerate stack frames from the given context diff --git a/include/wx/stackwalk.h b/include/wx/stackwalk.h index 8bb2371498..2a652b0759 100644 --- a/include/wx/stackwalk.h +++ b/include/wx/stackwalk.h @@ -132,10 +132,12 @@ public: // notice that Walk() frame itself is not included if skip >= 1) virtual void Walk(size_t skip = 1, size_t maxDepth = 200) = 0; +#if wxUSE_ON_FATAL_EXCEPTION // enumerate stack frames from the location of uncaught exception // // this version can only be called from wxApp::OnFatalException() virtual void WalkFromException(size_t maxDepth = 200) = 0; +#endif // wxUSE_ON_FATAL_EXCEPTION protected: // this function must be overrided to process the given frame diff --git a/include/wx/unix/stackwalk.h b/include/wx/unix/stackwalk.h index 96dc1ed702..2d1a6b53b5 100644 --- a/include/wx/unix/stackwalk.h +++ b/include/wx/unix/stackwalk.h @@ -74,7 +74,9 @@ public: } virtual void Walk(size_t skip = 1, size_t maxDepth = 200); +#if wxUSE_ON_FATAL_EXCEPTION virtual void WalkFromException(size_t maxDepth = 200) { Walk(2, maxDepth); } +#endif // wxUSE_ON_FATAL_EXCEPTION static const wxString& GetExePath() { return ms_exepath; } diff --git a/src/common/debugrpt.cpp b/src/common/debugrpt.cpp index 2fa3683d07..e9044154a7 100644 --- a/src/common/debugrpt.cpp +++ b/src/common/debugrpt.cpp @@ -478,11 +478,13 @@ bool wxDebugReport::AddContext(wxDebugReport::Context ctx) #if wxUSE_STACKWALKER wxXmlNode *nodeStack = new wxXmlNode(wxXML_ELEMENT_NODE, _T("stack")); XmlStackWalker sw(nodeStack); +#if wxUSE_ON_FATAL_EXCEPTION if ( ctx == Context_Exception ) { sw.WalkFromException(); } else // Context_Current +#endif // wxUSE_ON_FATAL_EXCEPTION { sw.Walk(); } diff --git a/src/msw/stackwalk.cpp b/src/msw/stackwalk.cpp index 212c2eda69..c620eae669 100644 --- a/src/msw/stackwalk.cpp +++ b/src/msw/stackwalk.cpp @@ -315,6 +315,8 @@ 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; @@ -326,13 +328,15 @@ void wxStackWalker::WalkFromException(size_t maxDepth) 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 +346,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 +404,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)) {