Skip to content
  1. Aug 03, 2011
    • Sean Callanan's avatar
      Fixed a bug in which the DWARF reader did not distinguish · 763d72a1
      Sean Callanan authored
      appropriately between C++ static methods and non-static
      methods.  This bug made it impossible to call most static
      methods, either because Clang did not recognize that a
      method could be called without providing a "this"
      parameter, or because Clang did not properly mangle the
      name of the method when searching for it in the target.
      
      Also added a testcase.
      
      llvm-svn: 136733
      763d72a1
  2. Aug 02, 2011
    • Enrico Granata's avatar
      Fixed a bug where a variable could not be formatted in a summary if its... · c3e320a7
      Enrico Granata authored
      Fixed a bug where a variable could not be formatted in a summary if its datatype already had a custom format
      Fixed a bug where Objective-C variables coming out of the expression parser could crash the Python synthetic providers:
       - expression parser output has a "frozen data" component, which is a byte-exact copy of the value (in host memory),
         if trying to read into memory based on the host address, LLDB would crash. we are now passing the correct (target)
         pointer to the Python code
      Objective-C "id" variables are now formatted according to their dynamic type, if the -d option to frame variable is used:
       - Code based on the Objective-C 2.0 runtime is used to obtain this information without running code on the target
      
      llvm-svn: 136695
      c3e320a7
    • Johnny Chen's avatar
      Simple renaming: self.swatch -> self.stopwatch. · da0384c9
      Johnny Chen authored
      llvm-svn: 136666
      da0384c9
    • Johnny Chen's avatar
      Add a Stopwatch utility class to lldbench.py module and initialize an instance of · 2352af85
      Johnny Chen authored
      Stopwatch (self.swatch) within the BenchBase's setUp() instance method to be available
      to all the child classes.
      
      Use self.swatch to measure elapsed time in TestRepeatedExprs.py, which needs to be
      modified later on to actually measure repeated expression evaluations within the
      context of lldb as well as gdb.
      
      llvm-svn: 136664
      2352af85
  3. Aug 01, 2011
  4. Jul 31, 2011
  5. Jul 30, 2011
    • Greg Clayton's avatar
      Cleaned up the NSString summary formatter to not print "<invalid object>" when · fc1aa292
      Greg Clayton authored
      we have a nil NSString *. Also added blank lines between functions in the
      CFString.py files.
      
      llvm-svn: 136554
      fc1aa292
    • Johnny Chen's avatar
      Add a @benchmarks_test decorator for test method we want to categorize as benchmarks test. · 5ccbccfc
      Johnny Chen authored
      The test driver now takes an option "+b" which enables to run just the benchmarks tests.
      By default, tests decorated with the @benchmarks_test decorator do not get run.
      
      Add an example benchmarks test directory which contains nothing for the time being,
      just to demonstrate the @benchmarks_test concept.
      
      For example,
      
      $ ./dotest.py -v benchmarks
      
      ...
      
      ----------------------------------------------------------------------
      Collected 2 tests
      
      1: test_with_gdb (TestRepeatedExprs.RepeatedExprssCase)
         Test repeated expressions with gdb. ... skipped 'benchmarks tests'
      2: test_with_lldb (TestRepeatedExprs.RepeatedExprssCase)
         Test repeated expressions with lldb. ... skipped 'benchmarks tests'
      
      ----------------------------------------------------------------------
      Ran 2 tests in 0.047s
      
      OK (skipped=2)
      $ ./dotest.py -v +b benchmarks
      
      ...
      
      ----------------------------------------------------------------------
      Collected 2 tests
      
      1: test_with_gdb (TestRepeatedExprs.RepeatedExprssCase)
         Test repeated expressions with gdb. ... running test_with_gdb
      benchmarks result for test_with_gdb
      ok
      2: test_with_lldb (TestRepeatedExprs.RepeatedExprssCase)
         Test repeated expressions with lldb. ... running test_with_lldb
      benchmarks result for test_with_lldb
      ok
      
      ----------------------------------------------------------------------
      Ran 2 tests in 0.270s
      
      OK
      
      Also mark some Python API tests which are missing the @python_api_test decorator.
      
      llvm-svn: 136553
      5ccbccfc
    • Enrico Granata's avatar
      changes in the new GetMinimumLanguages() ; robustness improvements in the... · 3bcee026
      Enrico Granata authored
      changes in the new GetMinimumLanguages() ; robustness improvements in the CFStringSynthProvider object ; made a CFString_SummaryProvider function you can use if all you care about is the summary string for your NSString objects
      
      llvm-svn: 136544
      3bcee026
    • Johnny Chen's avatar
      Add a redo.py script which takes a session directory name as arg and digs into the directory · 4a57d122
      Johnny Chen authored
      to find out the tests which failed/errored and need re-running.  The dotest.py test driver
      script is modified to allow specifying multiple -f testclass.testmethod in the command line
      to accommodate the redo functionality.
      
      An example,
      
       $ ./redo.py -n 2011-07-29-11_50_14
      adding filterspec: TargetAPITestCase.test_find_global_variables_with_dwarf
      adding filterspec: DisasmAPITestCase.test_with_dsym
      Running ./dotest.py -v  -f TargetAPITestCase.test_find_global_variables_with_dwarf -f DisasmAPITestCase.test_with_dsym
      
      ...
      
      ----------------------------------------------------------------------
      Collected 2 tests
      
      1: test_with_dsym (TestDisasmAPI.DisasmAPITestCase)
         Exercise getting SBAddress objects, disassembly, and SBAddress APIs. ... ok
      2: test_find_global_variables_with_dwarf (TestTargetAPI.TargetAPITestCase)
         Exercise SBTarget.FindGlobalVariables() API. ... ok
      
      ----------------------------------------------------------------------
      Ran 2 tests in 15.328s
      
      OK
      
      llvm-svn: 136533
      4a57d122
  6. Jul 29, 2011
    • Enrico Granata's avatar
    • Enrico Granata's avatar
      Public API changes: · 6f3533fb
      Enrico Granata authored
       - Completely new implementation of SBType
       - Various enhancements in several other classes
      Python synthetic children providers for std::vector<T>, std::list<T> and std::map<K,V>:
       - these return the actual elements into the container as the children of the container
       - basic template name parsing that works (hopefully) on both Clang and GCC
       - find them in examples/synthetic and in the test suite in functionalities/data-formatter/data-formatter-python-synth
      New summary string token ${svar :
       - the syntax is just the same as in ${var but this new token lets you read the values
         coming from the synthetic children provider instead of the actual children
       - Python providers above provide a synthetic child len that returns the number of elements
         into the container
      Full bug fix for the issue in which getting byte size for a non-complete type would crash LLDB
      Several other fixes, including:
       - inverted the order of arguments in the ClangASTType constructor
       - EvaluationPoint now only returns SharedPointer's to Target and Process
       - the help text for several type subcommands now correctly indicates argument-less options as such
      
      llvm-svn: 136504
      6f3533fb
    • Johnny Chen's avatar
      Add regression test for rdar://problem/9531204. · b15c1dbf
      Johnny Chen authored
      llvm-svn: 136425
      b15c1dbf
    • Johnny Chen's avatar
      Add test case for rdar://problem/9673664. · 09f24bc7
      Johnny Chen authored
      llvm-svn: 136409
      09f24bc7
  7. Jul 28, 2011
  8. Jul 27, 2011
  9. Jul 26, 2011
  10. 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
      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
  11. 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
  12. Jul 23, 2011
    • Johnny Chen's avatar
      Add an additional formatter class RecursiveDecentFormatter which prints the · 36d7d916
      Johnny Chen authored
      value and the decendents.  For an example,
      
      rdf = lldbutil.RecursiveDecentFormatter(indent_child=2)
      print rdf.format(g_table)
      
      produces:
      
      (const char **[2]) g_table = 0x00000001055a80f0 (location)
        (const char **) [0] = 0x00000001055a8080
          (const char *) *[0] = "Sunday"
        (const char **) [1] = 0x00000001055a80c0
          (const char *) *[1] = "Monday"
      
      llvm-svn: 135815
      36d7d916
  13. 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
    • 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
Loading