Skip to content
  1. Sep 02, 2010
    • Greg Clayton's avatar
      StackFrame objects now own ValueObjects for any frame variables (locals, args, · 288bdf9c
      Greg Clayton authored
      function statics, file globals and static variables) that a frame contains. 
      The StackFrame objects can give out ValueObjects instances for
      each variable which allows us to track when a variable changes and doesn't
      depend on variable names when getting value objects.
      
      StackFrame::GetVariableList now takes a boolean to indicate if we want to
      get the frame compile unit globals and static variables.
      
      The value objects in the stack frames can now correctly track when they have
      been modified. There are a few more tweaks needed to complete this work. The
      biggest issue is when stepping creates partial stacks (just frame zero usually)
      and causes previous stack frames not to match up with the current stack frames
      because the previous frames only has frame zero. We don't really want to 
      require that all previous frames be complete since stepping often must check
      stack frames to complete their jobs. I will fix this issue tomorrow.
      
      llvm-svn: 112800
      288bdf9c
    • Sean Callanan's avatar
      Added code to run pointer validation checks in · 8e999e40
      Sean Callanan authored
      expressions.  If an expression dereferences an
      invalid pointer, there will still be a crash -
      just now the crash will be in the function
      ___clang_valid_pointer_check().
      
      llvm-svn: 112785
      8e999e40
    • Jim Ingham's avatar
      Move "variable list" to "frame variable" · 6d56d2ce
      Jim Ingham authored
      llvm-svn: 112782
      6d56d2ce
  2. Sep 01, 2010
  3. Aug 31, 2010
  4. Aug 30, 2010
  5. Aug 28, 2010
  6. Aug 27, 2010
    • Greg Clayton's avatar
      Made it so we update the current frames from the previous frames by doing STL · 68275d5e
      Greg Clayton authored
      swaps on the variable list, value object list, and disassembly. This avoids
      us having to try and update frame indexes and other things that were getting
      out of sync.
      
      llvm-svn: 112301
      68275d5e
    • Greg Clayton's avatar
      Simplified the StackFrameList class down to a single frames list again · 5082c5fd
      Greg Clayton authored
      instead of trying to maintain the real frame list (unwind frames) and an
      inline frame list. The information is cheap to produce when we already have
      looked up a block and was making stack frame uniquing difficult when trying
      to use the previous stack when making the current stack.
      
      We now maintain the previous value object lists for common frames between
      a previous and current frames so we will be able to tell when variable values
      change.
      
      llvm-svn: 112277
      5082c5fd
    • Sean Callanan's avatar
      This is a major refactoring of the expression parser. · 1a8d4093
      Sean Callanan authored
      The goal is to separate the parser's data from the data
      belonging to the parser's clients.  This allows clients
      to use the parser to obtain (for example) a JIT compiled
      function or some DWARF code, and then discard the parser
      state.
      
      Previously, parser state was held in ClangExpression and
      used liberally by ClangFunction, which inherited from
      ClangExpression.  The main effects of this refactoring 
      are:
      
      - reducing ClangExpression to an abstract class that
        declares methods that any client must expose to the
        expression parser,
      
      - moving the code specific to implementing the "expr"
        command from ClangExpression and
        CommandObjectExpression into ClangUserExpression,
        a new class,
      
      - moving the common parser interaction code from
        ClangExpression into ClangExpressionParser, a new
        class, and
      
      - making ClangFunction rely only on
        ClangExpressionParser and not depend on the
        internal implementation of ClangExpression.
      
      Side effects include:
      
      - the compiler interaction code has been factored
        out of ClangFunction and is now in an AST pass
        (ASTStructExtractor),
      
      - the header file for ClangFunction is now fully
        documented,
      
      - several bugs that only popped up when Clang was
        deallocated (which never happened, since the
        lifetime of the compiler was essentially infinite)
        are now fixed, and
      
      - the developer-only "call" command has been
        disabled.
      
      I have tested the expr command and the Objective-C
      step-into code, which use ClangUserExpression and
      ClangFunction, respectively, and verified that they
      work.  Please let me know if you encounter bugs or
      poor documentation.
      
      llvm-svn: 112249
      1a8d4093
    • Jim Ingham's avatar
      Make: · 09b263e0
      Jim Ingham authored
      bt all
      
      show the backtrace for all threads, and:
      
      bt 1 3 4
      
      show the backtrace for threads 1, 3 and 4.  If we want to come up with some fancier syntax for thread lists later, that will be great, but this will do for now.
      
      llvm-svn: 112248
      09b263e0
    • Jim Ingham's avatar
      Change the "-S", "-F" and "-M" options to take their arguments directly,... · 2561aa61
      Jim Ingham authored
      Change the "-S", "-F" and "-M" options to take their arguments directly, rather than requiring the -n option.  This means you can't "or" together the types (i.e. set a breakpoint on a method or selector called "whatever".  But that is a pretty uncommon operation, and having to provide two flags for the more common "set a breakpoint on this selector" is annoying.
      
      llvm-svn: 112245
      2561aa61
    • Jim Ingham's avatar
      Add -c (count - i.e. number of frames to show) and -s (start frame.) · e2e0b451
      Jim Ingham authored
      llvm-svn: 112243
      e2e0b451
    • Greg Clayton's avatar
      Changed the StackID to store its start PC address as a load address instead of · 12fc3e0f
      Greg Clayton authored
      a section offset address.
      
      Fixed up some very inefficient STL code.
      
      llvm-svn: 112230
      12fc3e0f
  7. Aug 26, 2010
    • Jim Ingham's avatar
      Change "Current" as in GetCurrentThread, GetCurrentStackFrame, etc, to... · 2976d00a
      Jim Ingham authored
      Change "Current" as in GetCurrentThread, GetCurrentStackFrame, etc, to "Selected" i.e. GetSelectedThread.  Selected makes more sense, since these are set by some user action (a selection).  I didn't change "CurrentProcess" since this is always controlled by the target, and a given target can only have one process, so it really can't be selected.
      
      llvm-svn: 112221
      2976d00a
    • Jim Ingham's avatar
      Add StackFrame::IsInlined. · 6b8379c4
      Jim Ingham authored
      llvm-svn: 112217
      6b8379c4
    • Greg Clayton's avatar
      Cleaned up the inline stack frame code one more time to prepare for inlined · 0445d8f4
      Greg Clayton authored
      code stepping. Also we now store the stack frames for the current and previous
      stops in the thread in std::auto_ptr objects. When we create a thread stack
      frame list we pass the previous frame into it so it can re-use the frames
      and maintain will allow for variable changes to be detected. I will implement
      the stack frame reuse next.
      
      llvm-svn: 112152
      0445d8f4
  8. Aug 25, 2010
  9. Aug 24, 2010
    • Greg Clayton's avatar
      Got a lot of the kinks worked out in the inline support after debugging more · 9da7bd07
      Greg Clayton authored
      complex inlined examples.
      
      StackFrame classes don't have a "GetPC" anymore, they have "GetFrameCodeAddress()".
      This is because inlined frames will have a PC value that is the same as the 
      concrete frame that owns the inlined frame, yet the code locations for the
      frame can be different. We also need to be able to get the real PC value for
      a given frame so that variables evaluate correctly. To get the actual PC
      value for a frame you can use:
      
          addr_t pc = frame->GetRegisterContext()->GetPC();
      
      Some issues with the StackFrame stomping on its own symbol context were 
      resolved which were causing the information to change for a frame when the
      stack ID was calculated. Also the StackFrame will now correctly store the
      symbol context resolve flags for any extra bits of information that were 
      looked up (if you ask for a block only and you find one, you will alwasy have
      the compile unit and function).
      
      llvm-svn: 111964
      9da7bd07
    • Greg Clayton's avatar
      Added support for inlined stack frames being represented as real stack frames · 1b72fcb7
      Greg Clayton authored
      which is now on by default. Frames are gotten from the unwinder as concrete
      frames, then if inline frames are to be shown, extra information to track
      and reconstruct these frames is cached with each Thread and exanded as needed.
      
      I added an inline height as part of the lldb_private::StackID class, the class
      that helps us uniquely identify stack frames. This allows for two frames to
      shared the same call frame address, yet differ only in inline height.
      
      Fixed setting breakpoint by address to not require addresses to resolve.
      
      A quick example:
      
      % cat main.cpp
      
      % ./build/Debug/lldb test/stl/a.out 
      Current executable set to 'test/stl/a.out' (x86_64).
      (lldb) breakpoint set --address 0x0000000100000d31
      Breakpoint created: 1: address = 0x0000000100000d31, locations = 1
      (lldb) r
      Launching 'a.out'  (x86_64)
      (lldb) Process 38031 Stopped
      * thread #1: tid = 0x2e03, pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_data() const at /usr/include/c++/4.2.1/bits/basic_string.h:280, stop reason = breakpoint 1.1, queue = com.apple.main-thread
       277   	
       278   	      _CharT*
       279   	      _M_data() const
       280 ->	      { return  _M_dataplus._M_p; }
       281   	
       282   	      _CharT*
       283   	      _M_data(_CharT* __p)
      (lldb) bt
      thread #1: tid = 0x2e03, stop reason = breakpoint 1.1, queue = com.apple.main-thread
        frame #0: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_data() const at /usr/include/c++/4.2.1/bits/basic_string.h:280
        frame #1: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::_M_rep() const at /usr/include/c++/4.2.1/bits/basic_string.h:288
        frame #2: pc = 0x0000000100000d31, where = a.out`main [inlined] std::string::size() const at /usr/include/c++/4.2.1/bits/basic_string.h:606
        frame #3: pc = 0x0000000100000d31, where = a.out`main [inlined] operator<< <char, std::char_traits<char>, std::allocator<char> > at /usr/include/c++/4.2.1/bits/basic_string.h:2414
        frame #4: pc = 0x0000000100000d31, where = a.out`main + 33 at /Volumes/work/gclayton/Documents/src/lldb/test/stl/main.cpp:14
        frame #5: pc = 0x0000000100000d08, where = a.out`start + 52
      
      Each inline frame contains only the variables that they contain and each inlined
      stack frame is treated as a single entity.
      
      llvm-svn: 111877
      1b72fcb7
    • Sean Callanan's avatar
      Refactored ClangExpressionDeclMap to use · 64dfc9a3
      Sean Callanan authored
      ClangExpressionVariables for found external variables
      as well as for struct members, replacing the Tuple
      and StructMember data structures.
      
      llvm-svn: 111859
      64dfc9a3
  10. Aug 23, 2010
  11. Aug 21, 2010
    • Greg Clayton's avatar
      Modified the host process monitor callback function Host::StartMonitoringChildProcess · 0b76a2c2
      Greg Clayton authored
      to spawn a thread for each process that is being monitored. Previously
      LLDB would spawn a single thread that would wait for any child process which
      isn't ok to do as a shared library (LLDB.framework on Mac OSX, or lldb.so on
      linux). The old single thread used to call wait4() with a pid of -1 which 
      could cause it to reap child processes that it shouldn't have.
      
      Re-wrote the way Function blocks are handles. Previously I attempted to keep
      all blocks in a single memory allocation (in a std::vector). This made the
      code somewhat efficient, but hard to work with. I got rid of the old BlockList
      class, and went to a straight parent with children relationship. This new 
      approach will allow for partial parsing of the blocks within a function.
      
      llvm-svn: 111706
      0b76a2c2
  12. Aug 20, 2010
Loading