1 //===-- SWIG Interface for SBValue ------------------------------*- 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 the value of a variable, a register, or an expression. 14 15 SBValue supports iteration through its child, which in turn is represented 16 as an SBValue. For example, we can get the general purpose registers of a 17 frame as an SBValue, and iterate through all the registers, 18 19 registerSet = frame.GetRegisters() # Returns an SBValueList. 20 for regs in registerSet: 21 if 'general purpose registers' in regs.getName().lower(): 22 GPRs = regs 23 break 24 25 print '%s (number of children = %d):' % (GPRs.GetName(), GPRs.GetNumChildren()) 26 for reg in GPRs: 27 print 'Name: ', reg.GetName(), ' Value: ', reg.GetValue() 28 29 produces the output: 30 31 General Purpose Registers (number of children = 21): 32 Name: rax Value: 0x0000000100000c5c 33 Name: rbx Value: 0x0000000000000000 34 Name: rcx Value: 0x00007fff5fbffec0 35 Name: rdx Value: 0x00007fff5fbffeb8 36 Name: rdi Value: 0x0000000000000001 37 Name: rsi Value: 0x00007fff5fbffea8 38 Name: rbp Value: 0x00007fff5fbffe80 39 Name: rsp Value: 0x00007fff5fbffe60 40 Name: r8 Value: 0x0000000008668682 41 Name: r9 Value: 0x0000000000000000 42 Name: r10 Value: 0x0000000000001200 43 Name: r11 Value: 0x0000000000000206 44 Name: r12 Value: 0x0000000000000000 45 Name: r13 Value: 0x0000000000000000 46 Name: r14 Value: 0x0000000000000000 47 Name: r15 Value: 0x0000000000000000 48 Name: rip Value: 0x0000000100000dae 49 Name: rflags Value: 0x0000000000000206 50 Name: cs Value: 0x0000000000000027 51 Name: fs Value: 0x0000000000000010 52 Name: gs Value: 0x0000000000000048 53 54 See also linked_list_iter() for another perspective on how to iterate through an 55 SBValue instance which interprets the value object as representing the head of a 56 linked list." 57 ) SBValue; 58 class SBValue 59 { 60 public: 61 SBValue (); 62 63 SBValue (const SBValue &rhs); 64 65 ~SBValue (); 66 67 bool 68 IsValid(); 69 70 void 71 Clear(); 72 73 SBError 74 GetError(); 75 76 lldb::user_id_t 77 GetID (); 78 79 const char * 80 GetName(); 81 82 const char * 83 GetTypeName (); 84 85 size_t 86 GetByteSize (); 87 88 bool 89 IsInScope (); 90 91 lldb::Format 92 GetFormat (); 93 94 void 95 SetFormat (lldb::Format format); 96 97 const char * 98 GetValue (); 99 100 int64_t 101 GetValueAsSigned(SBError& error, int64_t fail_value=0); 102 103 uint64_t 104 GetValueAsUnsigned(SBError& error, uint64_t fail_value=0); 105 106 int64_t 107 GetValueAsSigned(int64_t fail_value=0); 108 109 uint64_t 110 GetValueAsUnsigned(uint64_t fail_value=0); 111 112 ValueType 113 GetValueType (); 114 115 bool 116 GetValueDidChange (); 117 118 const char * 119 GetSummary (); 120 121 const char * 122 GetObjectDescription (); 123 124 lldb::SBValue 125 GetDynamicValue (lldb::DynamicValueType use_dynamic); 126 127 lldb::SBValue 128 GetStaticValue (); 129 130 lldb::SBValue 131 GetNonSyntheticValue (); 132 133 lldb::DynamicValueType 134 GetPreferDynamicValue (); 135 136 void 137 SetPreferDynamicValue (lldb::DynamicValueType use_dynamic); 138 139 bool 140 GetPreferSyntheticValue (); 141 142 void 143 SetPreferSyntheticValue (bool use_synthetic); 144 145 bool 146 IsDynamic(); 147 148 bool 149 IsSynthetic (); 150 151 const char * 152 GetLocation (); 153 154 bool 155 SetValueFromCString (const char *value_str); 156 157 bool 158 SetValueFromCString (const char *value_str, lldb::SBError& error); 159 160 lldb::SBTypeFormat 161 GetTypeFormat (); 162 163 lldb::SBTypeSummary 164 GetTypeSummary (); 165 166 lldb::SBTypeFilter 167 GetTypeFilter (); 168 169 lldb::SBTypeSynthetic 170 GetTypeSynthetic (); 171 172 lldb::SBValue 173 GetChildAtIndex (uint32_t idx); 174 175 %feature("docstring", " 176 //------------------------------------------------------------------ 177 /// Get a child value by index from a value. 178 /// 179 /// Structs, unions, classes, arrays and and pointers have child 180 /// values that can be access by index. 181 /// 182 /// Structs and unions access child members using a zero based index 183 /// for each child member. For 184 /// 185 /// Classes reserve the first indexes for base classes that have 186 /// members (empty base classes are omitted), and all members of the 187 /// current class will then follow the base classes. 188 /// 189 /// Pointers differ depending on what they point to. If the pointer 190 /// points to a simple type, the child at index zero 191 /// is the only child value available, unless \a synthetic_allowed 192 /// is \b true, in which case the pointer will be used as an array 193 /// and can create 'synthetic' child values using positive or 194 /// negative indexes. If the pointer points to an aggregate type 195 /// (an array, class, union, struct), then the pointee is 196 /// transparently skipped and any children are going to be the indexes 197 /// of the child values within the aggregate type. For example if 198 /// we have a 'Point' type and we have a SBValue that contains a 199 /// pointer to a 'Point' type, then the child at index zero will be 200 /// the 'x' member, and the child at index 1 will be the 'y' member 201 /// (the child at index zero won't be a 'Point' instance). 202 /// 203 /// Arrays have a preset number of children that can be accessed by 204 /// index and will returns invalid child values for indexes that are 205 /// out of bounds unless the \a synthetic_allowed is \b true. In this 206 /// case the array can create 'synthetic' child values for indexes 207 /// that aren't in the array bounds using positive or negative 208 /// indexes. 209 /// 210 /// @param[in] idx 211 /// The index of the child value to get 212 /// 213 /// @param[in] use_dynamic 214 /// An enumeration that specifies wether to get dynamic values, 215 /// and also if the target can be run to figure out the dynamic 216 /// type of the child value. 217 /// 218 /// @param[in] synthetic_allowed 219 /// If \b true, then allow child values to be created by index 220 /// for pointers and arrays for indexes that normally wouldn't 221 /// be allowed. 222 /// 223 /// @return 224 /// A new SBValue object that represents the child member value. 225 //------------------------------------------------------------------ 226 ") GetChildAtIndex; 227 lldb::SBValue 228 GetChildAtIndex (uint32_t idx, 229 lldb::DynamicValueType use_dynamic, 230 bool can_create_synthetic); 231 232 lldb::SBValue 233 CreateChildAtOffset (const char *name, uint32_t offset, lldb::SBType type); 234 235 lldb::SBValue 236 SBValue::Cast (lldb::SBType type); 237 238 lldb::SBValue 239 CreateValueFromExpression (const char *name, const char* expression); 240 241 lldb::SBValue 242 CreateValueFromExpression (const char *name, const char* expression, SBExpressionOptions &options); 243 244 lldb::SBValue 245 CreateValueFromAddress(const char* name, lldb::addr_t address, lldb::SBType type); 246 247 lldb::SBValue 248 CreateValueFromData (const char* name, 249 lldb::SBData data, 250 lldb::SBType type); 251 252 lldb::SBType 253 GetType(); 254 255 %feature("docstring", " 256 //------------------------------------------------------------------ 257 /// Returns the child member index. 258 /// 259 /// Matches children of this object only and will match base classes and 260 /// member names if this is a clang typed object. 261 /// 262 /// @param[in] name 263 /// The name of the child value to get 264 /// 265 /// @return 266 /// An index to the child member value. 267 //------------------------------------------------------------------ 268 ") GetIndexOfChildWithName; 269 uint32_t 270 GetIndexOfChildWithName (const char *name); 271 272 lldb::SBValue 273 GetChildMemberWithName (const char *name); 274 275 %feature("docstring", " 276 //------------------------------------------------------------------ 277 /// Returns the child member value. 278 /// 279 /// Matches child members of this object and child members of any base 280 /// classes. 281 /// 282 /// @param[in] name 283 /// The name of the child value to get 284 /// 285 /// @param[in] use_dynamic 286 /// An enumeration that specifies wether to get dynamic values, 287 /// and also if the target can be run to figure out the dynamic 288 /// type of the child value. 289 /// 290 /// @return 291 /// A new SBValue object that represents the child member value. 292 //------------------------------------------------------------------ 293 ") GetChildMemberWithName; 294 lldb::SBValue 295 GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dynamic); 296 297 %feature("docstring", "Expands nested expressions like .a->b[0].c[1]->d." 298 ) GetValueForExpressionPath; 299 lldb::SBValue 300 GetValueForExpressionPath(const char* expr_path); 301 302 lldb::SBDeclaration 303 GetDeclaration (); 304 305 bool 306 MightHaveChildren (); 307 308 uint32_t 309 GetNumChildren (); 310 311 void * 312 GetOpaqueType(); 313 314 lldb::SBValue 315 Dereference (); 316 317 lldb::SBValue 318 AddressOf(); 319 320 bool 321 TypeIsPointerType (); 322 323 lldb::SBTarget 324 GetTarget(); 325 326 lldb::SBProcess 327 GetProcess(); 328 329 lldb::SBThread 330 GetThread(); 331 332 lldb::SBFrame 333 GetFrame(); 334 335 %feature("docstring", " 336 /// Find and watch a variable. 337 /// It returns an SBWatchpoint, which may be invalid. 338 ") Watch; 339 lldb::SBWatchpoint 340 Watch (bool resolve_location, bool read, bool write, SBError &error); 341 342 %feature("docstring", " 343 /// Find and watch the location pointed to by a variable. 344 /// It returns an SBWatchpoint, which may be invalid. 345 ") WatchPointee; 346 lldb::SBWatchpoint 347 WatchPointee (bool resolve_location, bool read, bool write, SBError &error); 348 349 bool 350 GetDescription (lldb::SBStream &description); 351 352 bool 353 GetExpressionPath (lldb::SBStream &description); 354 355 %feature("docstring", " 356 //------------------------------------------------------------------ 357 /// Get an SBData wrapping what this SBValue points to. 358 /// 359 /// This method will dereference the current SBValue, if its 360 /// data type is a T* or T[], and extract item_count elements 361 /// of type T from it, copying their contents in an SBData. 362 /// 363 /// @param[in] item_idx 364 /// The index of the first item to retrieve. For an array 365 /// this is equivalent to array[item_idx], for a pointer 366 /// to *(pointer + item_idx). In either case, the measurement 367 /// unit for item_idx is the sizeof(T) rather than the byte 368 /// 369 /// @param[in] item_count 370 /// How many items should be copied into the output. By default 371 /// only one item is copied, but more can be asked for. 372 /// 373 /// @return 374 /// An SBData with the contents of the copied items, on success. 375 /// An empty SBData otherwise. 376 //------------------------------------------------------------------ 377 ") GetPointeeData; 378 lldb::SBData 379 GetPointeeData (uint32_t item_idx = 0, 380 uint32_t item_count = 1); 381 382 %feature("docstring", " 383 //------------------------------------------------------------------ 384 /// Get an SBData wrapping the contents of this SBValue. 385 /// 386 /// This method will read the contents of this object in memory 387 /// and copy them into an SBData for future use. 388 /// 389 /// @return 390 /// An SBData with the contents of this SBValue, on success. 391 /// An empty SBData otherwise. 392 //------------------------------------------------------------------ 393 ") GetData; 394 lldb::SBData 395 GetData (); 396 397 bool 398 SetData (lldb::SBData &data, lldb::SBError& error); 399 400 lldb::addr_t 401 GetLoadAddress(); 402 403 lldb::SBAddress 404 GetAddress(); 405 406 %feature("docstring", "Returns an expression path for this value." 407 ) GetExpressionPath; 408 bool 409 GetExpressionPath (lldb::SBStream &description, bool qualify_cxx_base_classes); 410 411 %pythoncode %{ 412 def __get_dynamic__ (self): 413 '''Helper function for the "SBValue.dynamic" property.''' 414 return self.GetDynamicValue (eDynamicCanRunTarget) 415 416 __swig_getmethods__["name"] = GetName 417 if _newclass: name = property(GetName, None, doc='''A read only property that returns the name of this value as a string.''') 418 419 __swig_getmethods__["type"] = GetType 420 if _newclass: type = property(GetType, None, doc='''A read only property that returns a lldb.SBType object that represents the type for this value.''') 421 422 __swig_getmethods__["size"] = GetByteSize 423 if _newclass: size = property(GetByteSize, None, doc='''A read only property that returns the size in bytes of this value.''') 424 425 __swig_getmethods__["is_in_scope"] = IsInScope 426 if _newclass: is_in_scope = property(IsInScope, None, doc='''A read only property that returns a boolean value that indicates whether this value is currently lexically in scope.''') 427 428 __swig_getmethods__["format"] = GetFormat 429 __swig_setmethods__["format"] = SetFormat 430 if _newclass: format = property(GetName, SetFormat, doc='''A read/write property that gets/sets the format used for lldb.SBValue().GetValue() for this value. See enumerations that start with "lldb.eFormat".''') 431 432 __swig_getmethods__["value"] = GetValue 433 __swig_setmethods__["value"] = SetValueFromCString 434 if _newclass: value = property(GetValue, SetValueFromCString, doc='''A read/write property that gets/sets value from a string.''') 435 436 __swig_getmethods__["value_type"] = GetValueType 437 if _newclass: value_type = property(GetValueType, None, doc='''A read only property that returns an lldb enumeration value (see enumerations that start with "lldb.eValueType") that represents the type of this value (local, argument, global, register, etc.).''') 438 439 __swig_getmethods__["changed"] = GetValueDidChange 440 if _newclass: changed = property(GetValueDidChange, None, doc='''A read only property that returns a boolean value that indicates if this value has changed since it was last updated.''') 441 442 __swig_getmethods__["data"] = GetData 443 if _newclass: data = property(GetData, None, doc='''A read only property that returns an lldb object (lldb.SBData) that represents the bytes that make up the value for this object.''') 444 445 __swig_getmethods__["load_addr"] = GetLoadAddress 446 if _newclass: load_addr = property(GetLoadAddress, None, doc='''A read only property that returns the load address of this value as an integer.''') 447 448 __swig_getmethods__["addr"] = GetAddress 449 if _newclass: addr = property(GetAddress, None, doc='''A read only property that returns an lldb.SBAddress that represents the address of this value if it is in memory.''') 450 451 __swig_getmethods__["deref"] = Dereference 452 if _newclass: deref = property(Dereference, None, doc='''A read only property that returns an lldb.SBValue that is created by dereferencing this value.''') 453 454 __swig_getmethods__["address_of"] = AddressOf 455 if _newclass: address_of = property(AddressOf, None, doc='''A read only property that returns an lldb.SBValue that represents the address-of this value.''') 456 457 __swig_getmethods__["error"] = GetError 458 if _newclass: error = property(GetError, None, doc='''A read only property that returns the lldb.SBError that represents the error from the last time the variable value was calculated.''') 459 460 __swig_getmethods__["summary"] = GetSummary 461 if _newclass: summary = property(GetSummary, None, doc='''A read only property that returns the summary for this value as a string''') 462 463 __swig_getmethods__["description"] = GetObjectDescription 464 if _newclass: description = property(GetObjectDescription, None, doc='''A read only property that returns the language-specific description of this value as a string''') 465 466 __swig_getmethods__["dynamic"] = __get_dynamic__ 467 if _newclass: dynamic = property(__get_dynamic__, None, doc='''A read only property that returns an lldb.SBValue that is created by finding the dynamic type of this value.''') 468 469 __swig_getmethods__["location"] = GetLocation 470 if _newclass: location = property(GetLocation, None, doc='''A read only property that returns the location of this value as a string.''') 471 472 __swig_getmethods__["target"] = GetTarget 473 if _newclass: target = property(GetTarget, None, doc='''A read only property that returns the lldb.SBTarget that this value is associated with.''') 474 475 __swig_getmethods__["process"] = GetProcess 476 if _newclass: process = property(GetProcess, None, doc='''A read only property that returns the lldb.SBProcess that this value is associated with, the returned value might be invalid and should be tested.''') 477 478 __swig_getmethods__["thread"] = GetThread 479 if _newclass: thread = property(GetThread, None, doc='''A read only property that returns the lldb.SBThread that this value is associated with, the returned value might be invalid and should be tested.''') 480 481 __swig_getmethods__["frame"] = GetFrame 482 if _newclass: frame = property(GetFrame, None, doc='''A read only property that returns the lldb.SBFrame that this value is associated with, the returned value might be invalid and should be tested.''') 483 484 __swig_getmethods__["num_children"] = GetNumChildren 485 if _newclass: num_children = property(GetNumChildren, None, doc='''A read only property that returns the number of child lldb.SBValues that this value has.''') 486 487 __swig_getmethods__["unsigned"] = GetValueAsUnsigned 488 if _newclass: unsigned = property(GetValueAsUnsigned, None, doc='''A read only property that returns the value of this SBValue as an usigned integer.''') 489 490 __swig_getmethods__["signed"] = GetValueAsSigned 491 if _newclass: signed = property(GetValueAsSigned, None, doc='''A read only property that returns the value of this SBValue as a signed integer.''') 492 493 def get_expr_path(self): 494 s = SBStream() 495 self.GetExpressionPath (s) 496 return s.GetData() 497 498 __swig_getmethods__["path"] = get_expr_path 499 if _newclass: path = property(get_expr_path, None, doc='''A read only property that returns the expression path that one can use to reach this value in an expression.''') 500 %} 501 502 }; 503 504 } // namespace lldb 505