revised st*.h headers
[wxWidgets.git] / interface / wx / stackwalk.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: stackwalk.h
3 // Purpose: interface of wxStackWalker
4 // Author: wxWidgets team
5 // RCS-ID: $Id$
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
8
9 /**
10 @class wxStackWalker
11
12 wxStackWalker allows an application to enumerate, or walk, the stack frames
13 (the function callstack).
14
15 It is mostly useful in only two situations: inside wxApp::OnFatalException
16 function to programmatically get the location of the crash and, in debug builds,
17 in wxApp::OnAssertFailure to report the caller of the failed assert.
18
19 wxStackWalker works by repeatedly calling the wxStackWalker::OnStackFrame
20 method for each frame in the stack, so to use it you must derive your own
21 class from it and override this method.
22
23 This class will not return anything except raw stack frame addresses if the
24 debug information is not available. Under Win32 this means that the PDB file
25 matching the program being executed should be present.
26 Note that if you use Microsoft Visual C++ compiler, you can create PDB files
27 even for the programs built in release mode and it doesn't affect the program
28 size (at least if you don't forget to add @c /opt:ref option which is suppressed
29 by using @c /debug linker option by default but should be always enabled for
30 release builds).
31 Under Unix, you need to compile your program with debugging information
32 (usually using @c -g compiler and linker options) to get the file and line
33 numbers information, however function names should be available even without it.
34 Of course, all this is only @true if you build using a recent enough version
35 of GNU libc which provides the @c backtrace() function needed to walk the stack.
36
37 See @ref overview_debugging for how to make it available.
38
39 @library{wxbase}
40 @category{debugging}
41
42 @see wxStackFrame
43 */
44 class wxStackWalker
45 {
46 public:
47 /**
48 Constructor does nothing, use Walk() to walk the stack.
49 */
50 wxStackWalker();
51
52 /**
53 Destructor does nothing neither but should be virtual as this class is used as
54 a base one.
55 */
56 virtual ~wxStackWalker();
57
58 /**
59 This function must be overrided to process the given frame.
60 */
61 void OnStackFrame(const wxStackFrame& frame);
62
63 /**
64 Enumerate stack frames from the current location, skipping the initial
65 number of them (this can be useful when Walk() is called from some known
66 location and you don't want to see the first few frames anyhow; also
67 notice that Walk() frame itself is not included if skip = 1).
68
69 Up to @a maxDepth frames are walked from the innermost to the outermost one.
70 */
71 virtual void Walk(size_t skip = 1, size_t maxDepth = 200);
72
73 /**
74 Enumerate stack frames from the location of uncaught exception.
75 This method can only be called from wxApp::OnFatalException().
76
77 Up to @a maxDepth frames are walked from the innermost to the outermost one.
78 */
79 virtual void WalkFromException(size_t maxDepth = 200);
80 };
81
82
83
84 /**
85 @class wxStackFrame
86
87 wxStackFrame represents a single stack frame, or a single function in the call
88 stack, and is used exclusively together with wxStackWalker, see there for a more
89 detailed discussion.
90
91 @library{wxbase}
92 @category{debugging}
93
94 @see wxStackWalker
95 */
96 class wxStackFrame
97 {
98 public:
99 /**
100 Return the address of this frame.
101 */
102 void* GetAddress() const;
103
104 /**
105 Return the name of the file containing this frame, empty if unavailable
106 (typically because debug info is missing).
107
108 Use HasSourceLocation() to check whether the file name is available.
109 */
110 wxString GetFileName() const;
111
112 /**
113 Get the level of this frame (deepest/innermost one is 0).
114 */
115 size_t GetLevel() const;
116
117 /**
118 Return the line number of this frame, 0 if unavailable.
119
120 @see GetFileName()
121 */
122 size_t GetLine() const;
123
124 /**
125 Get the module this function belongs to (empty if not available).
126 */
127 wxString GetModule() const;
128
129 /**
130 Return the unmangled (if possible) name of the function containing this frame.
131 */
132 wxString GetName() const;
133
134 /**
135 Return the return address of this frame.
136 */
137 size_t GetOffset() const;
138
139 /**
140 Get the name, type and value (in text form) of the given parameter.
141 Any pointer may be @NULL if you're not interested in the corresponding value.
142
143 Return @true if at least some values could be retrieved.
144 This function currently is only implemented under Win32 and requires a PDB file.
145 */
146 bool GetParam(size_t n, wxString* type, wxString* name,
147 wxString* value) const;
148
149 /**
150 Return the number of parameters of this function (may return 0 if we
151 can't retrieve the parameters info even although the function does have
152 parameters).
153 */
154 virtual size_t GetParamCount() const;
155
156 /**
157 Return @true if we have the file name and line number for this frame.
158 */
159 bool HasSourceLocation() const;
160 };
161