Skip to content
  1. Jul 26, 2011
  2. Jul 25, 2011
    • Johnny Chen's avatar
      Provide an add-on API to SBValue class by post-processing to provide a way · 48225053
      Johnny Chen authored
      to iterate through an SBValue instance by treating it as the head of a linked
      list.  API program must provide two args to the linked_list_iter() method:
      the first being the child member name which points to the next item on the list
      and the second being a Python function which an SBValue (for the next item) and
      returns True if end of list is reached, otherwise it returns False.
      
      For example, suppose we have the following sample program.
      
      #include <stdio.h>
      
      class Task {
      public:
          int id;
          Task *next;
          Task(int i, Task *n):
              id(i),
              next(n)
          {}
      };
      
      
      int main (int argc, char const *argv[])
      {
          Task *task_head = new Task(-1, NULL);
          Task *task1 = new Task(1, NULL);
          Task *task2 = new Task(2, NULL);
          Task *task3 = new Task(3, NULL); // Orphaned.
          Task *task4 = new Task(4, NULL);
          Task *task5 = new Task(5, NULL);
      
          task_head->next = task1;
          task1->next = task2;
          task2->next = task4;
          task4->next = task5;
      
          int total = 0; // Break at this line
          Task *t = task_head;
          while (t != NULL) {
              if (t->id >= 0)
                  ++total;
              t = t->next;
          }
          printf("We have a total number of %d tasks\n", total);
          return 0;
      }
      
      The test program produces the following output while exercising the linked_list_iter() SBVAlue API:
      
      task_head:
      	TypeName      -> Task *
      	ByteSize      -> 8
      	NumChildren   -> 2
      	Value         -> 0x0000000106400380
      	ValueType     -> local_variable
      	Summary       -> None
      	IsPointerType -> True
      	Location      -> 0x00007fff65f06e60
      (Task *) next = 0x0000000106400390
        (int) id = 1
        (Task *) next = 0x00000001064003a0
      
      (Task *) next = 0x00000001064003a0
        (int) id = 2
        (Task *) next = 0x00000001064003c0
      
      (Task *) next = 0x00000001064003c0
        (int) id = 4
        (Task *) next = 0x00000001064003d0
      
      (Task *) next = 0x00000001064003d0
        (int) id = 5
        (Task *) next = 0x0000000000000000
      
      llvm-svn: 135938
      48225053
  3. Jul 24, 2011
    • Enrico Granata's avatar
      Python synthetic children: · a37a065c
      Enrico Granata authored
       - you can now define a Python class as a synthetic children producer for a type
         the class must adhere to this "interface":
              def __init__(self, valobj, dict):
           	def get_child_at_index(self, index):
           	def get_child_index(self, name):
         then using type synth add -l className typeName
         (e.g. type synth add -l fooSynthProvider foo)
         (This is still WIP with lots to be added)
         A small test case is available also as reference
      
      llvm-svn: 135865
      a37a065c
  4. Jul 22, 2011
    • Greg Clayton's avatar
      Make the SBAddress class easier to use when using the public · 00e6fbfe
      Greg Clayton authored
      API. 
      
      SBTarget changes include changing:
      
      bool
      SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr, 
                                    lldb::SBAddress& addr);
      
      to be:
      
      lldb::SBAddress
      SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr);
      
      SBAddress can how contruct itself using a load address and a target 
      which can be used to resolve the address:
      
      SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target);
      
      This will actually just call the new SetLoadAddress accessor:
      
      void
      SetLoadAddress (lldb::addr_t load_addr, 
                      lldb::SBTarget &target);
      
      This function will always succeed in making a SBAddress object
      that can be used in API calls (even if "target" isn't valid).
      If "target" is valid and there are sections currently loaded,
      then it will resolve the address to a section offset address if
      it can. Else an address with a NULL section and an offset that is
      the "load_addr" that was passed in. We do this because a load address
      might be from the heap or stack.
      
      llvm-svn: 135770
      00e6fbfe
  5. Jul 21, 2011
  6. Jul 20, 2011
  7. Jul 19, 2011
  8. Jul 18, 2011
  9. Jul 16, 2011
  10. Jul 15, 2011
    • Johnny Chen's avatar
      Add some more docstrings for SBCompileUnit and SBBreakpoint, plus incorporate... · 135f63fb
      Johnny Chen authored
      Add some more docstrings for SBCompileUnit and SBBreakpoint, plus incorporate the doxgen doc block of
      
      SBValue::GetChildAtIndex(uint32_t idx, 
                               lldb::DynamicValueType use_dynamic,
                               bool can_create_synthetic);
      
      into the SBValue docstrings.
      
      llvm-svn: 135295
      135f63fb
    • Enrico Granata's avatar
      Python summary strings: · f2bbf717
      Enrico Granata authored
       - you can use a Python script to write a summary string for data-types, in one of
         three ways:
          -P option and typing the script a line at a time
          -s option and passing a one-line Python script
          -F option and passing the name of a Python function
         these options all work for the "type summary add" command
         your Python code (if provided through -P or -s) is wrapped in a function
         that accepts two parameters: valobj (a ValueObject) and dict (an LLDB
         internal dictionary object). if you use -F and give a function name,
         you're expected to define the function on your own and with the right
         prototype. your function, however defined, must return a Python string
       - test case for the Python summary feature
       - a few quirks:
        Python summaries cannot have names, and cannot use regex as type names
        both issues will be fixed ASAP
      major redesign of type summary code:
       - type summary working with strings and type summary working with Python code
         are two classes, with a common base class SummaryFormat
       - SummaryFormat classes now are able to actively format objects rather than
         just aggregating data
       - cleaner code to print descriptions for summaries
      the public API now exports a method to easily navigate a ValueObject hierarchy
      New InputReaderEZ and PriorityPointerPair classes
      Several minor fixes and improvements
      
      llvm-svn: 135238
      f2bbf717
  11. Jul 14, 2011
  12. Jul 09, 2011
  13. Jul 06, 2011
  14. Jul 03, 2011
Loading