1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/msw/stackwalk.h
3 // Purpose: wxStackWalker for MSW
4 // Author: Vadim Zeitlin
8 // Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_MSW_STACKWALK_H_
13 #define _WX_MSW_STACKWALK_H_
15 // these structs are declared in windows headers
17 struct _EXCEPTION_POINTERS
;
19 // and these in dbghelp.h
22 // ----------------------------------------------------------------------------
24 // ----------------------------------------------------------------------------
26 class WXDLLIMPEXP_BASE wxStackFrame
: public wxStackFrameBase
29 wxStackFrame
*ConstCast() const
30 { return wx_const_cast(wxStackFrame
*, this); }
32 size_t DoGetParamCount() const { return m_paramTypes
.GetCount(); }
35 wxStackFrame(size_t level
, void *address
, size_t addrFrame
)
36 : wxStackFrameBase(level
, address
)
39 m_hasLocation
= false;
41 m_addrFrame
= addrFrame
;
44 virtual size_t GetParamCount() const
46 ConstCast()->OnGetParam();
47 return DoGetParamCount();
51 GetParam(size_t n
, wxString
*type
, wxString
*name
, wxString
*value
) const;
53 // callback used by OnGetParam(), don't call directly
54 void OnParam(_SYMBOL_INFO
*pSymInfo
);
57 virtual void OnGetName();
58 virtual void OnGetLocation();
63 // helper for debug API: it wants to have addresses as DWORDs
64 size_t GetSymAddr() const
66 return wx_reinterpret_cast(size_t, m_address
);
75 wxArrayString m_paramTypes
,
80 // ----------------------------------------------------------------------------
82 // ----------------------------------------------------------------------------
84 class WXDLLIMPEXP_BASE wxStackWalker
: public wxStackWalkerBase
89 virtual void Walk(size_t skip
= 1);
90 virtual void WalkFromException();
93 // enumerate stack frames from the given context
94 void WalkFrom(const _CONTEXT
*ctx
, size_t skip
= 1);
95 void WalkFrom(const _EXCEPTION_POINTERS
*ep
, size_t skip
= 1);
98 #endif // _WX_MSW_STACKWALK_H_