• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- SWIG Interface for SBFrame ------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 namespace lldb {
11 
12 %feature("docstring",
13 "Represents one of the stack frames associated with a thread.
14 SBThread contains SBFrame(s). For example (from test/lldbutil.py),
15 
16 def print_stacktrace(thread, string_buffer = False):
17     '''Prints a simple stack trace of this thread.'''
18 
19     ...
20 
21     for i in range(depth):
22         frame = thread.GetFrameAtIndex(i)
23         function = frame.GetFunction()
24 
25         load_addr = addrs[i].GetLoadAddress(target)
26         if not function:
27             file_addr = addrs[i].GetFileAddress()
28             start_addr = frame.GetSymbol().GetStartAddress().GetFileAddress()
29             symbol_offset = file_addr - start_addr
30             print >> output, '  frame #{num}: {addr:#016x} {mod}`{symbol} + {offset}'.format(
31                 num=i, addr=load_addr, mod=mods[i], symbol=symbols[i], offset=symbol_offset)
32         else:
33             print >> output, '  frame #{num}: {addr:#016x} {mod}`{func} at {file}:{line} {args}'.format(
34                 num=i, addr=load_addr, mod=mods[i],
35                 func='%s [inlined]' % funcs[i] if frame.IsInlined() else funcs[i],
36                 file=files[i], line=lines[i],
37                 args=get_args_as_string(frame, showFuncName=False) if not frame.IsInlined() else '()')
38 
39     ...
40 
41 And,
42 
43     for frame in thread:
44         print frame
45 
46 See also SBThread."
47 ) SBFrame;
48 class SBFrame
49 {
50 public:
51     SBFrame ();
52 
53     SBFrame (const lldb::SBFrame &rhs);
54 
55    ~SBFrame();
56 
57     bool
58     IsEqual (const lldb::SBFrame &rhs) const;
59 
60     bool
61     IsValid() const;
62 
63     uint32_t
64     GetFrameID () const;
65 
66     lldb::addr_t
67     GetPC () const;
68 
69     bool
70     SetPC (lldb::addr_t new_pc);
71 
72     lldb::addr_t
73     GetSP () const;
74 
75     lldb::addr_t
76     GetFP () const;
77 
78     lldb::SBAddress
79     GetPCAddress () const;
80 
81     lldb::SBSymbolContext
82     GetSymbolContext (uint32_t resolve_scope) const;
83 
84     lldb::SBModule
85     GetModule () const;
86 
87     lldb::SBCompileUnit
88     GetCompileUnit () const;
89 
90     lldb::SBFunction
91     GetFunction () const;
92 
93     lldb::SBSymbol
94     GetSymbol () const;
95 
96     %feature("docstring", "
97     /// Gets the deepest block that contains the frame PC.
98     ///
99     /// See also GetFrameBlock().
100     ") GetBlock;
101     lldb::SBBlock
102     GetBlock () const;
103 
104     %feature("docstring", "
105     /// Get the appropriate function name for this frame. Inlined functions in
106     /// LLDB are represented by Blocks that have inlined function information, so
107     /// just looking at the SBFunction or SBSymbol for a frame isn't enough.
108     /// This function will return the appriopriate function, symbol or inlined
109     /// function name for the frame.
110     ///
111     /// This function returns:
112     /// - the name of the inlined function (if there is one)
113     /// - the name of the concrete function (if there is one)
114     /// - the name of the symbol (if there is one)
115     /// - NULL
116     ///
117     /// See also IsInlined().
118     ") GetFunctionName;
119     const char *
120     GetFunctionName();
121 
122     %feature("docstring", "
123     /// Return true if this frame represents an inlined function.
124     ///
125     /// See also GetFunctionName().
126     ") IsInlined;
127     bool
128     IsInlined();
129 
130     %feature("docstring", "
131     /// The version that doesn't supply a 'use_dynamic' value will use the
132     /// target's default.
133     ") EvaluateExpression;
134     lldb::SBValue
135     EvaluateExpression (const char *expr);
136 
137     lldb::SBValue
138     EvaluateExpression (const char *expr, lldb::DynamicValueType use_dynamic);
139 
140     lldb::SBValue
141     EvaluateExpression (const char *expr, lldb::DynamicValueType use_dynamic, bool unwind_on_error);
142 
143     lldb::SBValue
144     EvaluateExpression (const char *expr, SBExpressionOptions &options);
145 
146     %feature("docstring", "
147     /// Gets the lexical block that defines the stack frame. Another way to think
148     /// of this is it will return the block that contains all of the variables
149     /// for a stack frame. Inlined functions are represented as SBBlock objects
150     /// that have inlined function information: the name of the inlined function,
151     /// where it was called from. The block that is returned will be the first
152     /// block at or above the block for the PC (SBFrame::GetBlock()) that defines
153     /// the scope of the frame. When a function contains no inlined functions,
154     /// this will be the top most lexical block that defines the function.
155     /// When a function has inlined functions and the PC is currently
156     /// in one of those inlined functions, this method will return the inlined
157     /// block that defines this frame. If the PC isn't currently in an inlined
158     /// function, the lexical block that defines the function is returned.
159     ") GetFrameBlock;
160     lldb::SBBlock
161     GetFrameBlock () const;
162 
163     lldb::SBLineEntry
164     GetLineEntry () const;
165 
166     lldb::SBThread
167     GetThread () const;
168 
169     const char *
170     Disassemble () const;
171 
172     void
173     Clear();
174 
175 #ifndef SWIG
176     bool
177     operator == (const lldb::SBFrame &rhs) const;
178 
179     bool
180     operator != (const lldb::SBFrame &rhs) const;
181 
182 #endif
183 
184     %feature("docstring", "
185     /// The version that doesn't supply a 'use_dynamic' value will use the
186     /// target's default.
187     ") GetVariables;
188     lldb::SBValueList
189     GetVariables (bool arguments,
190                   bool locals,
191                   bool statics,
192                   bool in_scope_only);
193 
194     lldb::SBValueList
195     GetVariables (bool arguments,
196                   bool locals,
197                   bool statics,
198                   bool in_scope_only,
199                   lldb::DynamicValueType  use_dynamic);
200 
201     lldb::SBValueList
202     GetRegisters ();
203 
204     %feature("docstring", "
205     /// The version that doesn't supply a 'use_dynamic' value will use the
206     /// target's default.
207     ") FindVariable;
208     lldb::SBValue
209     FindVariable (const char *var_name);
210 
211     lldb::SBValue
212     FindVariable (const char *var_name, lldb::DynamicValueType use_dynamic);
213 
214     lldb::SBValue
215     FindRegister (const char *name);
216 
217     %feature("docstring", "
218     /// Get a lldb.SBValue for a variable path.
219     ///
220     /// Variable paths can include access to pointer or instance members:
221     ///     rect_ptr->origin.y
222     ///     pt.x
223     /// Pointer dereferences:
224     ///     *this->foo_ptr
225     ///     **argv
226     /// Address of:
227     ///     &pt
228     ///     &my_array[3].x
229     /// Array accesses and treating pointers as arrays:
230     ///     int_array[1]
231     ///     pt_ptr[22].x
232     ///
233     /// Unlike EvaluateExpression() which returns lldb.SBValue objects
234     /// with constant copies of the values at the time of evaluation,
235     /// the result of this function is a value that will continue to
236     /// track the current value of the value as execution progresses
237     /// in the current frame.
238     ") GetValueForVariablePath;
239     lldb::SBValue
240     GetValueForVariablePath (const char *var_path);
241 
242     lldb::SBValue
243     GetValueForVariablePath (const char *var_path, lldb::DynamicValueType use_dynamic);
244 
245     %feature("docstring", "
246     /// Find variables, register sets, registers, or persistent variables using
247     /// the frame as the scope.
248     ///
249     /// The version that doesn't supply a 'use_dynamic' value will use the
250     /// target's default.
251     ") FindValue;
252     lldb::SBValue
253     FindValue (const char *name, ValueType value_type);
254 
255     lldb::SBValue
256     FindValue (const char *name, ValueType value_type, lldb::DynamicValueType use_dynamic);
257 
258     bool
259     GetDescription (lldb::SBStream &description);
260 
261     %pythoncode %{
262         def get_all_variables(self):
263             return self.GetVariables(True,True,True,True)
264 
265         def get_arguments(self):
266             return self.GetVariables(True,False,False,False)
267 
268         def get_locals(self):
269             return self.GetVariables(False,True,False,False)
270 
271         def get_statics(self):
272             return self.GetVariables(False,False,True,False)
273 
274         def var(self, var_expr_path):
275             '''Calls through to lldb.SBFrame.GetValueForVariablePath() and returns
276             a value that represents the variable expression path'''
277             return self.GetValueForVariablePath(var_expr_path)
278 
279         __swig_getmethods__["pc"] = GetPC
280         __swig_setmethods__["pc"] = SetPC
281         if _newclass: pc = property(GetPC, SetPC)
282 
283         __swig_getmethods__["addr"] = GetPCAddress
284         if _newclass: addr = property(GetPCAddress, None, doc='''A read only property that returns the program counter (PC) as a section offset address (lldb.SBAddress).''')
285 
286         __swig_getmethods__["fp"] = GetFP
287         if _newclass: fp = property(GetFP, None, doc='''A read only property that returns the frame pointer (FP) as an unsigned integer.''')
288 
289         __swig_getmethods__["sp"] = GetSP
290         if _newclass: sp = property(GetSP, None, doc='''A read only property that returns the stack pointer (SP) as an unsigned integer.''')
291 
292         __swig_getmethods__["module"] = GetModule
293         if _newclass: module = property(GetModule, None, doc='''A read only property that returns an lldb object that represents the module (lldb.SBModule) for this stack frame.''')
294 
295         __swig_getmethods__["compile_unit"] = GetCompileUnit
296         if _newclass: compile_unit = property(GetCompileUnit, None, doc='''A read only property that returns an lldb object that represents the compile unit (lldb.SBCompileUnit) for this stack frame.''')
297 
298         __swig_getmethods__["function"] = GetFunction
299         if _newclass: function = property(GetFunction, None, doc='''A read only property that returns an lldb object that represents the function (lldb.SBFunction) for this stack frame.''')
300 
301         __swig_getmethods__["symbol"] = GetSymbol
302         if _newclass: symbol = property(GetSymbol, None, doc='''A read only property that returns an lldb object that represents the symbol (lldb.SBSymbol) for this stack frame.''')
303 
304         __swig_getmethods__["block"] = GetBlock
305         if _newclass: block = property(GetBlock, None, doc='''A read only property that returns an lldb object that represents the block (lldb.SBBlock) for this stack frame.''')
306 
307         __swig_getmethods__["is_inlined"] = IsInlined
308         if _newclass: is_inlined = property(IsInlined, None, doc='''A read only property that returns an boolean that indicates if the block frame is an inlined function.''')
309 
310         __swig_getmethods__["name"] = GetFunctionName
311         if _newclass: name = property(GetFunctionName, None, doc='''A read only property that retuns the name for the function that this frame represents. Inlined stack frame might have a concrete function that differs from the name of the inlined function (a named lldb.SBBlock).''')
312 
313         __swig_getmethods__["line_entry"] = GetLineEntry
314         if _newclass: line_entry = property(GetLineEntry, None, doc='''A read only property that returns an lldb object that represents the line table entry (lldb.SBLineEntry) for this stack frame.''')
315 
316         __swig_getmethods__["thread"] = GetThread
317         if _newclass: thread = property(GetThread, None, doc='''A read only property that returns an lldb object that represents the thread (lldb.SBThread) for this stack frame.''')
318 
319         __swig_getmethods__["disassembly"] = Disassemble
320         if _newclass: disassembly = property(Disassemble, None, doc='''A read only property that returns the disassembly for this stack frame as a python string.''')
321 
322         __swig_getmethods__["idx"] = GetFrameID
323         if _newclass: idx = property(GetFrameID, None, doc='''A read only property that returns the zero based stack frame index.''')
324 
325         __swig_getmethods__["variables"] = get_all_variables
326         if _newclass: variables = property(get_all_variables, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the variables in this stack frame.''')
327 
328         __swig_getmethods__["vars"] = get_all_variables
329         if _newclass: vars = property(get_all_variables, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the variables in this stack frame.''')
330 
331         __swig_getmethods__["locals"] = get_locals
332         if _newclass: locals = property(get_locals, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the local variables in this stack frame.''')
333 
334         __swig_getmethods__["args"] = get_arguments
335         if _newclass: args = property(get_arguments, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the argument variables in this stack frame.''')
336 
337         __swig_getmethods__["arguments"] = get_arguments
338         if _newclass: arguments = property(get_arguments, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the argument variables in this stack frame.''')
339 
340         __swig_getmethods__["statics"] = get_statics
341         if _newclass: statics = property(get_statics, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the static variables in this stack frame.''')
342 
343         __swig_getmethods__["registers"] = GetRegisters
344         if _newclass: registers = property(GetRegisters, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the CPU registers for this stack frame.''')
345 
346         __swig_getmethods__["regs"] = GetRegisters
347         if _newclass: regs = property(GetRegisters, None, doc='''A read only property that returns a list() that contains a collection of lldb.SBValue objects that represent the CPU registers for this stack frame.''')
348 
349     %}
350 };
351 
352 } // namespace lldb
353