]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/stackwalk.cpp
use (new) safer GetTraitsIfExists() in wxMutexGuiEnter/Leave() to avoid crashing...
[wxWidgets.git] / src / msw / stackwalk.cpp
index 8bdf7d4021931971216fa80aa6796d9fe01014d8..212c2eda6919da527ac9ffa72c818353dd54c42e 100644 (file)
@@ -56,7 +56,7 @@ void wxStackFrame::OnGetName()
     wxZeroMemory(symbolBuffer);
 
     PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)symbolBuffer;
-    pSymbol->SizeOfStruct = sizeof(symbolBuffer);
+    pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
     pSymbol->MaxNameLen = MAX_NAME_LEN;
 
     DWORD64 symDisplacement = 0;
@@ -214,7 +214,7 @@ void wxStackFrame::OnGetParam()
 // wxStackWalker
 // ----------------------------------------------------------------------------
 
-void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip)
+void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip, size_t maxDepth)
 {
     if ( !wxDbgHelpDLL::Init() )
     {
@@ -267,7 +267,7 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip)
 #endif // _M_IX86
 
     // iterate over all stack frames
-    for ( size_t nLevel = 0; ; nLevel++ )
+    for ( size_t nLevel = 0; nLevel < maxDepth; nLevel++ )
     {
         // get the next stack frame
         if ( !wxDbgHelpDLL::StackWalk
@@ -293,7 +293,7 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip)
         if ( nLevel >= skip )
         {
             wxStackFrame frame(nLevel - skip,
-                               (void *)sf.AddrPC.Offset,
+                               wxUIntToPtr(sf.AddrPC.Offset),
                                sf.AddrFrame.Offset);
 
             OnStackFrame(frame);
@@ -310,12 +310,12 @@ void wxStackWalker::WalkFrom(const CONTEXT *pCtx, size_t skip)
 #endif
 }
 
-void wxStackWalker::WalkFrom(const _EXCEPTION_POINTERS *ep, size_t skip)
+void wxStackWalker::WalkFrom(const _EXCEPTION_POINTERS *ep, size_t skip, size_t maxDepth)
 {
-    WalkFrom(ep->ContextRecord, skip);
+    WalkFrom(ep->ContextRecord, skip, maxDepth);
 }
 
-void wxStackWalker::WalkFromException()
+void wxStackWalker::WalkFromException(size_t maxDepth)
 {
     extern EXCEPTION_POINTERS *wxGlobalSEInformation;
 
@@ -323,10 +323,10 @@ void wxStackWalker::WalkFromException()
                  _T("wxStackWalker::WalkFromException() can only be called from wxApp::OnFatalException()") );
 
     // don't skip any frames, the first one is where we crashed
-    WalkFrom(wxGlobalSEInformation, 0);
+    WalkFrom(wxGlobalSEInformation, 0, maxDepth);
 }
 
-void wxStackWalker::Walk(size_t skip)
+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
@@ -386,21 +386,24 @@ void wxStackFrame::OnGetParam()
 // ----------------------------------------------------------------------------
 
 void
-wxStackWalker::WalkFrom(const CONTEXT * WXUNUSED(pCtx), size_t WXUNUSED(skip))
+wxStackWalker::WalkFrom(const CONTEXT * WXUNUSED(pCtx),
+                        size_t WXUNUSED(skip),
+                        size_t WXUNUSED(maxDepth))
 {
 }
 
 void
 wxStackWalker::WalkFrom(const _EXCEPTION_POINTERS * WXUNUSED(ep),
-                        size_t WXUNUSED(skip))
+                        size_t WXUNUSED(skip),
+                        size_t WXUNUSED(maxDepth))
 {
 }
 
-void wxStackWalker::WalkFromException()
+void wxStackWalker::WalkFromException(size_t WXUNUSED(maxDepth))
 {
 }
 
-void wxStackWalker::Walk(size_t WXUNUSED(skip))
+void wxStackWalker::Walk(size_t WXUNUSED(skip), size_t WXUNUSED(maxDepth))
 {
 }