Skip to content
  1. Jul 26, 2011
  2. Jul 25, 2011
    • Johnny Chen's avatar
      Add a stronger assert for the test to ensure that the visited items from iterating through · ca24cfa4
      Johnny Chen authored
      the SBValue.linked_list_iter() API is equal to [1, 2, 4, 5].
      
      llvm-svn: 135944
      ca24cfa4
    • 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
    • Enrico Granata's avatar
      Python synthetic providers must provide a num_children call; this was not... · f73dcc7b
      Enrico Granata authored
      Python synthetic providers must provide a num_children call; this was not specified in the docs up to now
      
      llvm-svn: 135933
      f73dcc7b
    • Enrico Granata's avatar
      new flag -P to type synth add lets you type a Python class interactively · c53114e3
      Enrico Granata authored
      added a final newline to fooSynthProvider.py
      new option to automatically save user input in InputReaderEZ
      checking for NULL pointers in several new places
      
      llvm-svn: 135916
      c53114e3
  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 23, 2011
  5. Jul 22, 2011
    • Johnny Chen's avatar
      Add new API for SBAddress to the fuzz test: · 08c09100
      Johnny Chen authored
      SetLoadAddress (lldb::addr_t load_addr, 
                     	lldb::SBTarget &target);
      
      llvm-svn: 135793
      08c09100
    • Peter Collingbourne's avatar
      Disable compilation of RegisterContextDarwin_arm.cpp on non-Darwin platforms, · a67dd8fc
      Peter Collingbourne authored
      and fix RegisterContextDarwin_x86_64.cpp build
      
      RegisterContextDarwin_arm.cpp contains too much platform specific code
      to easily fix.
      
      llvm-svn: 135792
      a67dd8fc
    • Peter Collingbourne's avatar
      Update ProcessLinux::CanDebug prototype · 027ab7e5
      Peter Collingbourne authored
      llvm-svn: 135791
      027ab7e5
    • Peter Collingbourne's avatar
      Add support for platforms without sa_len to SocketAddress, and modify · 9a8d848c
      Peter Collingbourne authored
      some code to use it
      
      llvm-svn: 135790
      9a8d848c
    • Enrico Granata's avatar
      some editing of data visualization error messages to make them more meaningful · e992a089
      Enrico Granata authored
      debugging printfs() for data visualization turned into a meaningful log:
       - introduced a new log category `types' in channel `lldb'
      
      llvm-svn: 135773
      e992a089
    • 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
    • Johnny Chen's avatar
      Fix comment. · efee1cdc
      Johnny Chen authored
      llvm-svn: 135737
      efee1cdc
    • Johnny Chen's avatar
      Add BasicFormatter and ChildVisitingFormatter utility classes to the lldbutil.py module · 989b7efd
      Johnny Chen authored
      which provide some convenient ways to print an SBValue object.  Use that in TestValueAPI.py
      to print the 'days_of_week' char* array variable.
      
      For an example:
      
      cvf = lldbutil.ChildVisitingFormatter(indent=2)
      print cvf.format(days_of_week)
      
      produces:
      
      (const char *[7]) days_of_week = 0x00000001026a5060 (location)
        (const char *) [0] = "Sunday"
        (const char *) [1] = "Monday"
        (const char *) [2] = "Tuesday"
        (const char *) [3] = "Wednesday"
        (const char *) [4] = "Thursday"
        (const char *) [5] = "Friday"
        (const char *) [6] = "Saturday"
      
      llvm-svn: 135736
      989b7efd
    • Enrico Granata's avatar
      when typing a summary string you can use the %S symbol to explicitly indicate... · d55546b2
      Enrico Granata authored
      when typing a summary string you can use the %S symbol to explicitly indicate that you want the summary to be used to print the target object
       (e.g. ${var%S}). this might already be the default if your variable is of an aggregate type
      new feature: synthetic filters. you can restrict the number of children for your variables to only a meaningful subset
       - the restricted list of children obeys the typical rules (e.g. summaries prevail over children)
       - one-line summaries show only the filtered (synthetic) children, if you type an expanded summary string, or you use Python scripts, all the real children are accessible
       - to provide a synthetic children list use the "type synth add" command, as in:
         type synth add foo_type --child varA --child varB[0] --child varC->packet->flags[1-4]
         (you can use ., ->, single-item array operator [N] and bitfield operator [N-M]; array slice access is not supported, giving simplified names to expression paths is not supported)
       - a new -S option to frame variable and target variable lets you override synthetic children and instead show real ones
      
      llvm-svn: 135731
      d55546b2
    • Johnny Chen's avatar
      6cbb8d68
  6. Jul 21, 2011
  7. Jul 20, 2011
Loading