1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/msw/stackwalk.h
3 // Purpose: wxStackWalker for MSW
4 // Author: Vadim Zeitlin
5 // Modified by: Suzumizaki-kimitaka 2013-04-09
7 // Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_MSW_STACKWALK_H_
12 #define _WX_MSW_STACKWALK_H_
14 #include "wx/arrstr.h"
16 // these structs are declared in windows headers
18 struct _EXCEPTION_POINTERS
;
20 // and these in dbghelp.h
24 // ----------------------------------------------------------------------------
26 // ----------------------------------------------------------------------------
28 class WXDLLIMPEXP_BASE wxStackFrame
: public wxStackFrameBase
31 wxStackFrame
*ConstCast() const
32 { return const_cast<wxStackFrame
*>(this); }
34 size_t DoGetParamCount() const { return m_paramTypes
.GetCount(); }
37 wxStackFrame(size_t level
, void *address
, size_t addrFrame
)
38 : wxStackFrameBase(level
, address
)
41 m_hasLocation
= false;
43 m_addrFrame
= addrFrame
;
46 virtual size_t GetParamCount() const
48 ConstCast()->OnGetParam();
49 return DoGetParamCount();
53 GetParam(size_t n
, wxString
*type
, wxString
*name
, wxString
*value
) const;
55 // callback used by OnGetParam(), don't call directly
57 void OnParam(_SYMBOL_INFOW
* pSymInfo
);
59 void OnParam(_SYMBOL_INFO
* pSymInfo
);
63 virtual void OnGetName();
64 virtual void OnGetLocation();
69 // helper for debug API: it wants to have addresses as DWORDs
70 size_t GetSymAddr() const
72 return reinterpret_cast<size_t>(m_address
);
81 wxArrayString m_paramTypes
,
86 // ----------------------------------------------------------------------------
88 // ----------------------------------------------------------------------------
90 class WXDLLIMPEXP_BASE wxStackWalker
: public wxStackWalkerBase
93 // we don't use ctor argument, it is for compatibility with Unix version
95 wxStackWalker(const char * WXUNUSED(argv0
) = NULL
) { }
97 virtual void Walk(size_t skip
= 1, size_t maxDepth
= wxSTACKWALKER_MAX_DEPTH
);
98 #if wxUSE_ON_FATAL_EXCEPTION
99 virtual void WalkFromException(size_t maxDepth
= wxSTACKWALKER_MAX_DEPTH
);
100 #endif // wxUSE_ON_FATAL_EXCEPTION
103 // enumerate stack frames from the given context
104 void WalkFrom(const _CONTEXT
*ctx
, size_t skip
= 1, size_t maxDepth
= wxSTACKWALKER_MAX_DEPTH
);
105 void WalkFrom(const _EXCEPTION_POINTERS
*ep
, size_t skip
= 1, size_t maxDepth
= wxSTACKWALKER_MAX_DEPTH
);
108 #endif // _WX_MSW_STACKWALK_H_