1 //===-- SBValue.h -----------------------------------------------*- 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 #ifndef LLDB_SBValue_h_
11 #define LLDB_SBValue_h_
12 
13 #include "lldb/API/SBData.h"
14 #include "lldb/API/SBDefines.h"
15 #include "lldb/API/SBType.h"
16 
17 class ValueImpl;
18 class ValueLocker;
19 
20 namespace lldb {
21 
22 class SBValue
23 {
24 friend class ValueLocker;
25 
26 public:
27     SBValue ();
28 
29     SBValue (const lldb::SBValue &rhs);
30 
31     lldb::SBValue &
32     operator =(const lldb::SBValue &rhs);
33 
34     ~SBValue ();
35 
36     bool
37     IsValid();
38 
39     void
40     Clear();
41 
42     SBError
43     GetError();
44 
45     lldb::user_id_t
46     GetID ();
47 
48     const char *
49     GetName();
50 
51     const char *
52     GetTypeName ();
53 
54     size_t
55     GetByteSize ();
56 
57     bool
58     IsInScope ();
59 
60     lldb::Format
61     GetFormat ();
62 
63     void
64     SetFormat (lldb::Format format);
65 
66     const char *
67     GetValue ();
68 
69     int64_t
70     GetValueAsSigned (lldb::SBError& error, int64_t fail_value=0);
71 
72     uint64_t
73     GetValueAsUnsigned (lldb::SBError& error, uint64_t fail_value=0);
74 
75     int64_t
76     GetValueAsSigned(int64_t fail_value=0);
77 
78     uint64_t
79     GetValueAsUnsigned(uint64_t fail_value=0);
80 
81     ValueType
82     GetValueType ();
83 
84     bool
85     GetValueDidChange ();
86 
87     const char *
88     GetSummary ();
89 
90     const char *
91     GetObjectDescription ();
92 
93     lldb::SBValue
94     GetDynamicValue (lldb::DynamicValueType use_dynamic);
95 
96     lldb::SBValue
97     GetStaticValue ();
98 
99     lldb::SBValue
100     GetNonSyntheticValue ();
101 
102     lldb::DynamicValueType
103     GetPreferDynamicValue ();
104 
105     void
106     SetPreferDynamicValue (lldb::DynamicValueType use_dynamic);
107 
108     bool
109     GetPreferSyntheticValue ();
110 
111     void
112     SetPreferSyntheticValue (bool use_synthetic);
113 
114     bool
115     IsDynamic ();
116 
117     bool
118     IsSynthetic ();
119 
120     const char *
121     GetLocation ();
122 
123     // Deprecated - use the one that takes SBError&
124     bool
125     SetValueFromCString (const char *value_str);
126 
127     bool
128     SetValueFromCString (const char *value_str, lldb::SBError& error);
129 
130     lldb::SBTypeFormat
131     GetTypeFormat ();
132 
133 #ifndef LLDB_DISABLE_PYTHON
134     lldb::SBTypeSummary
135     GetTypeSummary ();
136 #endif
137 
138     lldb::SBTypeFilter
139     GetTypeFilter ();
140 
141 #ifndef LLDB_DISABLE_PYTHON
142     lldb::SBTypeSynthetic
143     GetTypeSynthetic ();
144 #endif
145 
146     lldb::SBValue
147     GetChildAtIndex (uint32_t idx);
148 
149     lldb::SBValue
150     CreateChildAtOffset (const char *name, uint32_t offset, lldb::SBType type);
151 
152     lldb::SBValue
153     Cast (lldb::SBType type);
154 
155     lldb::SBValue
156     CreateValueFromExpression (const char *name, const char* expression);
157 
158     lldb::SBValue
159     CreateValueFromExpression (const char *name, const char* expression, SBExpressionOptions &options);
160 
161     lldb::SBValue
162     CreateValueFromAddress (const char* name,
163                             lldb::addr_t address,
164                             lldb::SBType type);
165 
166     // this has no address! GetAddress() and GetLoadAddress() as well as AddressOf()
167     // on the return of this call all return invalid
168     lldb::SBValue
169     CreateValueFromData (const char* name,
170                          lldb::SBData data,
171                          lldb::SBType type);
172 
173     //------------------------------------------------------------------
174     /// Get a child value by index from a value.
175     ///
176     /// Structs, unions, classes, arrays and and pointers have child
177     /// values that can be access by index.
178     ///
179     /// Structs and unions access child members using a zero based index
180     /// for each child member. For
181     ///
182     /// Classes reserve the first indexes for base classes that have
183     /// members (empty base classes are omitted), and all members of the
184     /// current class will then follow the base classes.
185     ///
186     /// Pointers differ depending on what they point to. If the pointer
187     /// points to a simple type, the child at index zero
188     /// is the only child value available, unless \a synthetic_allowed
189     /// is \b true, in which case the pointer will be used as an array
190     /// and can create 'synthetic' child values using positive or
191     /// negative indexes. If the pointer points to an aggregate type
192     /// (an array, class, union, struct), then the pointee is
193     /// transparently skipped and any children are going to be the indexes
194     /// of the child values within the aggregate type. For example if
195     /// we have a 'Point' type and we have a SBValue that contains a
196     /// pointer to a 'Point' type, then the child at index zero will be
197     /// the 'x' member, and the child at index 1 will be the 'y' member
198     /// (the child at index zero won't be a 'Point' instance).
199     ///
200     /// Arrays have a preset number of children that can be accessed by
201     /// index and will returns invalid child values for indexes that are
202     /// out of bounds unless the \a synthetic_allowed is \b true. In this
203     /// case the array can create 'synthetic' child values for indexes
204     /// that aren't in the array bounds using positive or negative
205     /// indexes.
206     ///
207     /// @param[in] idx
208     ///     The index of the child value to get
209     ///
210     /// @param[in] use_dynamic
211     ///     An enumeration that specifies wether to get dynamic values,
212     ///     and also if the target can be run to figure out the dynamic
213     ///     type of the child value.
214     ///
215     /// @param[in] synthetic_allowed
216     ///     If \b true, then allow child values to be created by index
217     ///     for pointers and arrays for indexes that normally wouldn't
218     ///     be allowed.
219     ///
220     /// @return
221     ///     A new SBValue object that represents the child member value.
222     //------------------------------------------------------------------
223     lldb::SBValue
224     GetChildAtIndex (uint32_t idx,
225                      lldb::DynamicValueType use_dynamic,
226                      bool can_create_synthetic);
227 
228     // Matches children of this object only and will match base classes and
229     // member names if this is a clang typed object.
230     uint32_t
231     GetIndexOfChildWithName (const char *name);
232 
233     // Matches child members of this object and child members of any base
234     // classes.
235     lldb::SBValue
236     GetChildMemberWithName (const char *name);
237 
238     // Matches child members of this object and child members of any base
239     // classes.
240     lldb::SBValue
241     GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic);
242 
243     // Expands nested expressions like .a->b[0].c[1]->d
244     lldb::SBValue
245     GetValueForExpressionPath(const char* expr_path);
246 
247     lldb::SBValue
248     AddressOf();
249 
250     lldb::addr_t
251     GetLoadAddress();
252 
253     lldb::SBAddress
254     GetAddress();
255 
256     //------------------------------------------------------------------
257     /// Get an SBData wrapping what this SBValue points to.
258     ///
259     /// This method will dereference the current SBValue, if its
260     /// data type is a T* or T[], and extract item_count elements
261     /// of type T from it, copying their contents in an SBData.
262     ///
263     /// @param[in] item_idx
264     ///     The index of the first item to retrieve. For an array
265     ///     this is equivalent to array[item_idx], for a pointer
266     ///     to *(pointer + item_idx). In either case, the measurement
267     ///     unit for item_idx is the sizeof(T) rather than the byte
268     ///
269     /// @param[in] item_count
270     ///     How many items should be copied into the output. By default
271     ///     only one item is copied, but more can be asked for.
272     ///
273     /// @return
274     ///     An SBData with the contents of the copied items, on success.
275     ///     An empty SBData otherwise.
276     //------------------------------------------------------------------
277     lldb::SBData
278     GetPointeeData (uint32_t item_idx = 0,
279                     uint32_t item_count = 1);
280 
281     //------------------------------------------------------------------
282     /// Get an SBData wrapping the contents of this SBValue.
283     ///
284     /// This method will read the contents of this object in memory
285     /// and copy them into an SBData for future use.
286     ///
287     /// @return
288     ///     An SBData with the contents of this SBValue, on success.
289     ///     An empty SBData otherwise.
290     //------------------------------------------------------------------
291     lldb::SBData
292     GetData ();
293 
294     bool
295     SetData (lldb::SBData &data, lldb::SBError& error);
296 
297     lldb::SBDeclaration
298     GetDeclaration ();
299 
300     //------------------------------------------------------------------
301     /// Find out if a SBValue might have children.
302     ///
303     /// This call is much more efficient than GetNumChildren() as it
304     /// doesn't need to complete the underlying type. This is designed
305     /// to be used in a UI environment in order to detect if the
306     /// disclosure triangle should be displayed or not.
307     ///
308     /// This function returns true for class, union, structure,
309     /// pointers, references, arrays and more. Again, it does so without
310     /// doing any expensive type completion.
311     ///
312     /// @return
313     ///     Returns \b true if the SBValue might have children, or \b
314     ///     false otherwise.
315     //------------------------------------------------------------------
316     bool
317     MightHaveChildren ();
318 
319     uint32_t
320     GetNumChildren ();
321 
322     void *
323     GetOpaqueType();
324 
325     lldb::SBTarget
326     GetTarget();
327 
328     lldb::SBProcess
329     GetProcess();
330 
331     lldb::SBThread
332     GetThread();
333 
334     lldb::SBFrame
335     GetFrame();
336 
337     lldb::SBValue
338     Dereference ();
339 
340     bool
341     TypeIsPointerType ();
342 
343     lldb::SBType
344     GetType();
345 
346     bool
347     GetDescription (lldb::SBStream &description);
348 
349     bool
350     GetExpressionPath (lldb::SBStream &description);
351 
352     bool
353     GetExpressionPath (lldb::SBStream &description,
354                        bool qualify_cxx_base_classes);
355 
356     SBValue (const lldb::ValueObjectSP &value_sp);
357 
358     //------------------------------------------------------------------
359     /// Watch this value if it resides in memory.
360     ///
361     /// Sets a watchpoint on the value.
362     ///
363     /// @param[in] resolve_location
364     ///     Resolve the location of this value once and watch its address.
365     ///     This value must currently be set to \b true as watching all
366     ///     locations of a variable or a variable path is not yet supported,
367     ///     though we plan to support it in the future.
368     ///
369     /// @param[in] read
370     ///     Stop when this value is accessed.
371     ///
372     /// @param[in] write
373     ///     Stop when this value is modified
374     ///
375     /// @param[out]
376     ///     An error object. Contains the reason if there is some failure.
377     ///
378     /// @return
379     ///     An SBWatchpoint object. This object might not be valid upon
380     ///     return due to a value not being contained in memory, too
381     ///     large, or watchpoint resources are not available or all in
382     ///     use.
383     //------------------------------------------------------------------
384     lldb::SBWatchpoint
385     Watch (bool resolve_location, bool read, bool write, SBError &error);
386 
387     // Backward compatibility fix in the interim.
388     lldb::SBWatchpoint
389     Watch (bool resolve_location, bool read, bool write);
390 
391     //------------------------------------------------------------------
392     /// Watch this value that this value points to in memory
393     ///
394     /// Sets a watchpoint on the value.
395     ///
396     /// @param[in] resolve_location
397     ///     Resolve the location of this value once and watch its address.
398     ///     This value must currently be set to \b true as watching all
399     ///     locations of a variable or a variable path is not yet supported,
400     ///     though we plan to support it in the future.
401     ///
402     /// @param[in] read
403     ///     Stop when this value is accessed.
404     ///
405     /// @param[in] write
406     ///     Stop when this value is modified
407     ///
408     /// @param[out]
409     ///     An error object. Contains the reason if there is some failure.
410     ///
411     /// @return
412     ///     An SBWatchpoint object. This object might not be valid upon
413     ///     return due to a value not being contained in memory, too
414     ///     large, or watchpoint resources are not available or all in
415     ///     use.
416     //------------------------------------------------------------------
417     lldb::SBWatchpoint
418     WatchPointee (bool resolve_location, bool read, bool write, SBError &error);
419 
420     //------------------------------------------------------------------
421     /// Same as the protected version of GetSP that takes a locker, except that we make the
422     /// locker locally in the function.  Since the Target API mutex is recursive, and the
423     /// StopLocker is a read lock, you can call this function even if you are already
424     /// holding the two above-mentioned locks.
425     ///
426     /// @return
427     ///     A ValueObjectSP of the best kind (static, dynamic or synthetic) we
428     ///     can cons up, in accordance with the SBValue's settings.
429     //------------------------------------------------------------------
430     lldb::ValueObjectSP
431     GetSP () const;
432 
433 protected:
434     friend class SBBlock;
435     friend class SBFrame;
436     friend class SBTarget;
437     friend class SBThread;
438     friend class SBValueList;
439 
440     //------------------------------------------------------------------
441     /// Get the appropriate ValueObjectSP from this SBValue, consulting the
442     /// use_dynamic and use_synthetic options passed in to SetSP when the
443     /// SBValue's contents were set.  Since this often requires examining memory,
444     /// and maybe even running code, it needs to acquire the Target API and Process StopLock.
445     /// Those are held in an opaque class ValueLocker which is currently local to SBValue.cpp.
446     /// So you don't have to get these yourself just default construct a ValueLocker, and pass it into this.
447     /// If we need to make a ValueLocker and use it in some other .cpp file, we'll have to move it to
448     /// ValueObject.h/cpp or somewhere else convenient.  We haven't needed to so far.
449     ///
450     /// @param[in] value_locker
451     ///     An object that will hold the Target API, and Process RunLocks, and
452     ///     auto-destroy them when it goes out of scope.  Currently this is only useful in
453     ///     SBValue.cpp.
454     ///
455     /// @return
456     ///     A ValueObjectSP of the best kind (static, dynamic or synthetic) we
457     ///     can cons up, in accordance with the SBValue's settings.
458     //------------------------------------------------------------------
459     lldb::ValueObjectSP
460     GetSP (ValueLocker &value_locker) const;
461 
462     // these calls do the right thing WRT adjusting their settings according to the target's preferences
463     void
464     SetSP (const lldb::ValueObjectSP &sp);
465 
466     void
467     SetSP (const lldb::ValueObjectSP &sp, bool use_synthetic);
468 
469     void
470     SetSP (const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic);
471 
472     void
473     SetSP (const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic, bool use_synthetic);
474 
475     void
476     SetSP (const lldb::ValueObjectSP &sp, lldb::DynamicValueType use_dynamic, bool use_synthetic, const char *name);
477 
478 private:
479     typedef std::shared_ptr<ValueImpl> ValueImplSP;
480     ValueImplSP m_opaque_sp;
481 
482     void
483     SetSP (ValueImplSP impl_sp);
484 };
485 
486 } // namespace lldb
487 
488 #endif  // LLDB_SBValue_h_
489