Skip to content
  1. Feb 16, 2012
  2. Feb 15, 2012
    • Enrico Granata's avatar
      <rdar://problem/10062621> · 061858ce
      Enrico Granata authored
      New public API for handling formatters: creating, deleting, modifying categories, and formatters, and managing type/formatter association.
      This provides SB classes for each of the main object types involved in providing formatter support:
       SBTypeCategory
       SBTypeFilter
       SBTypeFormat
       SBTypeSummary
       SBTypeSynthetic
      plus, an SBTypeNameSpecifier class that is used on the public API layer to abstract the notion that formatters can be applied to plain type-names as well as to regular expressions
      For naming consistency, this patch also renames a lot of formatters-related classes.
      Plus, the changes in how flags are handled that started with summaries is now extended to other classes as well. A new enum (lldb::eTypeOption) is meant to support this on the public side.
      The patch also adds several new calls to the formatter infrastructure that are used to implement by-index accessing and several other design changes required to accommodate the new API layer.
      An architectural change is introduced in that backing objects for formatters now become writable. On the public API layer, CoW is implemented to prevent unwanted propagation of changes.
      Lastly, there are some modifications in how the "default" category is constructed and managed in relation to other categories.
      
      llvm-svn: 150558
      061858ce
  3. Jan 30, 2012
    • Greg Clayton's avatar
      SBFrame is now threadsafe using some extra tricks. One issue is that stack · b9556acc
      Greg Clayton authored
      frames might go away (the object itself, not the actual logical frame) when
      we are single stepping due to the way we currently sometimes end up flushing
      frames when stepping in/out/over. They later will come back to life 
      represented by another object yet they have the same StackID. Now when you get
      a lldb::SBFrame object, it will track the frame it is initialized with until 
      the thread goes away or the StackID no longer exists in the stack for the 
      thread it was created on. It uses a weak_ptr to both the frame and thread and
      also stores the StackID. These three items allow us to determine when the
      stack frame object has gone away (the weak_ptr will be NULL) and allows us to
      find the correct frame again. In our test suite we had such cases where we
      were just getting lucky when something like this happened:
      
      1 - stop at breakpoint
      2 - get first frame in thread where we stopped
      3 - run an expression that causes the program to JIT and run code
      4 - run more expressions on the frame from step 2 which was very very luckily
          still around inside a shared pointer, yet, not part of the current 
          thread (a new stack frame object had appeared with the same stack ID and
          depth). 
          
      We now avoid all such issues and properly keep up to date, or we start 
      returning errors when the frame doesn't exist and always responds with
      invalid answers.
      
      Also fixed the UserSettingsController  (not going to rewrite this just yet)
      so that it doesn't crash on shutdown. Using weak_ptr's came in real handy to
      track when the master controller has already gone away and this allowed me to
      pull out the previous NotifyOwnerIsShuttingDown() patch as it is no longer 
      needed.
      
      llvm-svn: 149231
      b9556acc
  4. Jan 29, 2012
    • Greg Clayton's avatar
      Switching back to using std::tr1::shared_ptr. We originally switched away · e1cd1be6
      Greg Clayton authored
      due to RTTI worries since llvm and clang don't use RTTI, but I was able to 
      switch back with no issues as far as I can tell. Once the RTTI issue wasn't
      an issue, we were looking for a way to properly track weak pointers to objects
      to solve some of the threading issues we have been running into which naturally
      led us back to std::tr1::weak_ptr. We also wanted the ability to make a shared 
      pointer from just a pointer, which is also easily solved using the 
      std::tr1::enable_shared_from_this class. 
      
      The main reason for this move back is so we can start properly having weak
      references to objects. Currently a lldb_private::Thread class has a refrence
      to its parent lldb_private::Process. This doesn't work well when we now hand
      out a SBThread object that contains a shared pointer to a lldb_private::Thread
      as this SBThread can be held onto by external clients and if they end up
      using one of these objects we can easily crash.
      
      So the next task is to start adopting std::tr1::weak_ptr where ever it makes
      sense which we can do with lldb_private::Debugger, lldb_private::Target,
      lldb_private::Process, lldb_private::Thread, lldb_private::StackFrame, and
      many more objects now that they are no longer using intrusive ref counted
      pointer objects (you can't do std::tr1::weak_ptr functionality with intrusive
      pointers).
      
      llvm-svn: 149207
      e1cd1be6
  5. Jan 18, 2012
  6. Jan 14, 2012
    • Greg Clayton's avatar
      <rdar://problem/9731573> · 32720b51
      Greg Clayton authored
      Fixed two double "int close(int fd)" issues found by our file descriptor
      interposing library on darwin:
      
      The first is in SBDebugger::SetInputFileHandle (FILE *file, bool transfer_ownership)
      where we would give our FILE * to a lldb_private::File object member variable and tell
      it that it owned the file descriptor if "transfer_ownership" was true, and then we
      would also give it to the communication plug-in that waits for stdin to come in and
      tell it that it owned the FILE *. They would both try and close the file.
      
      The seconds was when we use a file descriptor through ConnectionFileDescriptor 
      where someone else is creating a connection with ConnectionFileDescriptor and a URL
      like: "fd://123". We were always taking ownwership of the fd 123, when we shouldn't
      be. There is a TODO in the comments that says we should allow URL options to be passed
      to be able to specify this later (something like: "fd://123?transer_ownership=1"), but
      we can get to this later.
      
      llvm-svn: 148201
      32720b51
    • Greg Clayton's avatar
      <rdar://problem/10684141> · ccbc08e6
      Greg Clayton authored
      When the lldb_private::Debugger goes away, it should cleanup all
      of its targets.
      
      llvm-svn: 148189
      ccbc08e6
  7. Jan 13, 2012
    • Greg Clayton's avatar
      Added a new thread and frame format that can be used to display a function · 6d3dbf51
      Greg Clayton authored
      name + arguments when the data is available. It seems to work really well, 
      but some more testing is needed before we make this on by default.
      
      The new function format name is:
      
       ${function.name-with-args}
      
      To see how to use these formats see the website:
      
          http://lldb.llvm.org/formats.html
      
      Here is a sample backtrace of debugging LLDB with LLDB using this new format
      value:
      
      (lldb) thread backtrace all
      * thread #1: tid = 0x2203, 0x00007fff88a17bca libsystem_kernel.dylib __psynch_cvwait + 10, stop reason = signal SIGINT, name = <lldb.driver.main-thread>, queue = com.apple.main-thread
          frame #0: 0x00007fff88a17bca libsystem_kernel.dylib __psynch_cvwait + 10
          frame #1: 0x00007fff884ae274 libsystem_c.dylib _pthread_cond_wait + 840
          frame #2: 0x00000001010778ea LLDB lldb_private::Condition::Wait(this=0x0000000104846770, mutex=0x0000000104846730, abstime=0x0000000000000000, timed_out=0x00007fff5fbfdea7) + 138 at Condition.cpp:92
          frame #3: 0x0000000101244c21 LLDB lldb_private::Predicate<bool>::WaitForValueEqualTo(this=0x0000000104846728, value=true, abstime=0x0000000000000000, timed_out=0x00007fff5fbfdea7) + 209 at Predicate.h:317
          frame #4: 0x0000000100f6eeb2 LLDB lldb_private::Listener::WaitForEventsInternal(this=0x0000000104846660, timeout=0x0000000000000000, broadcaster=0x0000000000000000, broadcaster_names=0x0000000000000000, num_broadcaster_names=0x00000000, event_type_mask=0x00000000, event_sp=0x00007fff5fbfe030) + 386 at Listener.cpp:388
          frame #5: 0x0000000100f6f231 LLDB lldb_private::Listener::WaitForEvent(this=0x0000000104846660, timeout=0x0000000000000000, event_sp=0x00007fff5fbfe030) + 81 at Listener.cpp:436
          frame #6: 0x0000000100098dcd LLDB lldb::SBListener::WaitForEvent(this=0x00007fff5fbff0f0, timeout_secs=0xffffffff, event=0x00007fff5fbfe430) + 685 at SBListener.cpp:181
          frame #7: 0x000000010000628c lldb Driver::MainLoop(this=0x00007fff5fbff620) + 5244 at Driver.cpp:1325
          frame #8: 0x0000000100006ca3 lldb main(argc=1, argv=0x00007fff5fbff758, envp=0x00007fff5fbff768) + 419 at Driver.cpp:1460
          frame #9: 0x0000000100000d54 lldb start + 52
      
        thread #3: tid = 0x2703, 0x00007fff88a17df2 libsystem_kernel.dylib select$DARWIN_EXTSN + 10, name = <lldb.comm.debugger.input>
          frame #0: 0x00007fff88a17df2 libsystem_kernel.dylib select$DARWIN_EXTSN + 10
          frame #1: 0x0000000100f3f072 LLDB lldb_private::ConnectionFileDescriptor::BytesAvailable(this=0x000000010524d040, timeout_usec=0x004c4b40, error_ptr=0x0000000105640a18) + 722 at ConnectionFileDescriptor.cpp:542
          frame #2: 0x0000000100f3e6dd LLDB lldb_private::ConnectionFileDescriptor::Read(this=0x000000010524d040, dst=0x0000000105640a60, dst_len=1024, timeout_usec=0x004c4b40, status=0x0000000105640a14, error_ptr=0x0000000105640a18) + 301 at ConnectionFileDescriptor.cpp:273
          frame #3: 0x0000000100f3b8f7 LLDB lldb_private::Communication::ReadFromConnection(this=0x0000000104846270, dst=0x0000000105640a60, dst_len=1024, timeout_usec=0x004c4b40, status=0x0000000105640a14, error_ptr=0x0000000105640a18) + 167 at Communication.cpp:317
          frame #4: 0x0000000100f3b197 LLDB lldb_private::Communication::ReadThread(p=0x0000000104846270) + 327 at Communication.cpp:344
          frame #5: 0x0000000101078923 LLDB ThreadCreateTrampoline(arg=0x00000001045f6650) + 227 at Host.cpp:549
          frame #6: 0x00007fff884aa8bf libsystem_c.dylib _pthread_start + 335
          frame #7: 0x00007fff884adb75 libsystem_c.dylib thread_start + 13
      
        thread #4: tid = 0x2803, 0x00007fff88a17df2 libsystem_kernel.dylib select$DARWIN_EXTSN + 10, name = <lldb.comm.driver.editline>
          frame #0: 0x00007fff88a17df2 libsystem_kernel.dylib select$DARWIN_EXTSN + 10
          frame #1: 0x0000000100f3f072 LLDB lldb_private::ConnectionFileDescriptor::BytesAvailable(this=0x0000000105700370, timeout_usec=0x004c4b40, error_ptr=0x00000001056c3a18) + 722 at ConnectionFileDescriptor.cpp:542
          frame #2: 0x0000000100f3e6dd LLDB lldb_private::ConnectionFileDescriptor::Read(this=0x0000000105700370, dst=0x00000001056c3a60, dst_len=1024, timeout_usec=0x004c4b40, status=0x00000001056c3a14, error_ptr=0x00000001056c3a18) + 301 at ConnectionFileDescriptor.cpp:273
          frame #3: 0x0000000100f3b8f7 LLDB lldb_private::Communication::ReadFromConnection(this=0x0000000105700000, dst=0x00000001056c3a60, dst_len=1024, timeout_usec=0x004c4b40, status=0x00000001056c3a14, error_ptr=0x00000001056c3a18) + 167 at Communication.cpp:317
          frame #4: 0x0000000100f3b197 LLDB lldb_private::Communication::ReadThread(p=0x0000000105700000) + 327 at Communication.cpp:344
          frame #5: 0x0000000101078923 LLDB ThreadCreateTrampoline(arg=0x0000000105700430) + 227 at Host.cpp:549
          frame #6: 0x00007fff884aa8bf libsystem_c.dylib _pthread_start + 335
          frame #7: 0x00007fff884adb75 libsystem_c.dylib thread_start + 13
      
        thread #5: tid = 0x2903, 0x00007fff88a17df2 libsystem_kernel.dylib select$DARWIN_EXTSN + 10, name = <lldb.comm.driver.editline_output>
          frame #0: 0x00007fff88a17df2 libsystem_kernel.dylib select$DARWIN_EXTSN + 10
          frame #1: 0x0000000100f3f072 LLDB lldb_private::ConnectionFileDescriptor::BytesAvailable(this=0x00000001057178f0, timeout_usec=0x004c4b40, error_ptr=0x0000000105980a18) + 722 at ConnectionFileDescriptor.cpp:542
          frame #2: 0x0000000100f3e6dd LLDB lldb_private::ConnectionFileDescriptor::Read(this=0x00000001057178f0, dst=0x0000000105980a60, dst_len=1024, timeout_usec=0x004c4b40, status=0x0000000105980a14, error_ptr=0x0000000105980a18) + 301 at ConnectionFileDescriptor.cpp:273
          frame #3: 0x0000000100f3b8f7 LLDB lldb_private::Communication::ReadFromConnection(this=0x0000000105717580, dst=0x0000000105980a60, dst_len=1024, timeout_usec=0x004c4b40, status=0x0000000105980a14, error_ptr=0x0000000105980a18) + 167 at Communication.cpp:317
          frame #4: 0x0000000100f3b197 LLDB lldb_private::Communication::ReadThread(p=0x0000000105717580) + 327 at Communication.cpp:344
          frame #5: 0x0000000101078923 LLDB ThreadCreateTrampoline(arg=0x00000001057179b0) + 227 at Host.cpp:549
          frame #6: 0x00007fff884aa8bf libsystem_c.dylib _pthread_start + 335
          frame #7: 0x00007fff884adb75 libsystem_c.dylib thread_start + 13
      
        thread #6: tid = 0x2a03, 0x00007fff88a18af2 libsystem_kernel.dylib read + 10, name = <lldb.driver.commandline_io>
          frame #0: 0x00007fff88a18af2 libsystem_kernel.dylib read + 10
          frame #1: 0x0000000100050c3b libedit.3.dylib read_init + 247
          frame #2: 0x0000000100050e96 libedit.3.dylib el_wgetc + 155
          frame #3: 0x000000010005115d libedit.3.dylib el_wgets + 578
          frame #4: 0x000000010005debc libedit.3.dylib el_gets + 37
          frame #5: 0x000000010000d409 lldb IOChannel::LibeditGetInput(this=0x0000000105700490, new_line=0x0000000105a03db0) + 89 at IOChannel.cpp:311
          frame #6: 0x000000010000d8b6 lldb IOChannel::Run(this=0x0000000105700490) + 806 at IOChannel.cpp:391
          frame #7: 0x000000010000d57d lldb IOChannel::IOReadThread(ptr=0x0000000105700490) + 29 at IOChannel.cpp:345
          frame #8: 0x0000000101078923 LLDB ThreadCreateTrampoline(arg=0x00000001057179f0) + 227 at Host.cpp:549
          frame #9: 0x00007fff884aa8bf libsystem_c.dylib _pthread_start + 335
          frame #10: 0x00007fff884adb75 libsystem_c.dylib thread_start + 13
      (lldb) 
      
      llvm-svn: 148110
      6d3dbf51
  8. Dec 22, 2011
  9. Dec 17, 2011
    • Jim Ingham's avatar
      Add the ability to capture the return value in a thread's stop info, and print it · 73ca05a2
      Jim Ingham authored
      as part of the thread format output.
      Currently this is only done for the ThreadPlanStepOut.
      Add a convenience API ABI::GetReturnValueObject.
      Change the ValueObject::EvaluationPoint to BE an ExecutionContextScope, rather than
      trying to hand out one of its subsidiary object's pointers.  That way this will always
      be good.
      
      llvm-svn: 146806
      73ca05a2
  10. Nov 21, 2011
    • Greg Clayton's avatar
      Many GDB users always want to display disassembly when they stop by using · e372b98d
      Greg Clayton authored
      something like "display/4i $pc" (or something like this). With LLDB we already
      were showing 3 lines of source before and 3 lines of source after the current
      source line when showing a stop context. We now improve this by allowing the
      user to control the number of lines with the new "stop-line-count-before" and
      "stop-line-count-after" settings. Also, there is a new setting for how many
      disassembly lines to show: "stop-disassembly-count". This will control how many
      source lines are shown when there is no source or when we have no source line
      info. 
      
      settings set stop-line-count-before 3
      settings set stop-line-count-after 3
      settings set stop-disassembly-count 4
      settings set stop-disassembly-display no-source
      
      The default values are set as shown above and allow 3 lines of source before 
      and after (what we used to do) the current stop location, and will display 4 
      lines of disassembly if the source is not available or if we have no debug
      info. If both "stop-source-context-before" and "stop-source-context-after" are
      set to zero, this will disable showing any source when stopped. The 
      "stop-disassembly-display" setting is an enumeration that allows you to control
      when to display disassembly. It has 3 possible values:
      
      "never" - never show disassembly no matter what
      "no-source" - only show disassembly when there is no source line info or the source files are missing
      "always" - always show disassembly.
      
      llvm-svn: 145050
      e372b98d
  11. Nov 17, 2011
  12. Nov 16, 2011
    • Greg Clayton's avatar
      Made the darwin host layer properly reap any child processes that it spawns. · e4e45924
      Greg Clayton authored
      After recent changes we weren't reaping child processes resulting in many
      zombie processes. 
      
      This was fixed by adding more settings to the ProcessLaunchOptions class
      that allow clients to specify a callback function and baton to be notified
      when their process dies. If one is not supplied a default callback will be
      used that "does the right thing". 
      
      Cleaned up a race condition in the ProcessGDBRemote class that would attempt
      to monitor when debugserver died. 
      
      Added an extra boolean to the process monitor callbacks that indicate if a
      process exited or not. If your process exited with a zero exit status and no
      signal, both items could be zero.
      
      Modified the process monitor functions to not require a callback function
      in order to reap the child process.
      
      llvm-svn: 144780
      e4e45924
  13. Oct 26, 2011
    • Greg Clayton's avatar
      Cleaned up many error codes. For any who is filling in error strings into · 86edbf41
      Greg Clayton authored
      lldb_private::Error objects the rules are:
      - short strings that don't start with a capitol letter unless the name is a
        class or anything else that is always capitolized
      - no trailing newline character
      - should be one line if possible
      
      Implemented a first pass at adding "--gdb-format" support to anything that
      accepts format with optional size/count.
      
      llvm-svn: 142999
      86edbf41
  14. Oct 19, 2011
    • Greg Clayton's avatar
      Moved lldb::user_id_t values to be 64 bit. This was going to be needed for · 81c22f61
      Greg Clayton authored
      process IDs, and thread IDs, but was mainly needed for for the UserID's for
      Types so that DWARF with debug map can work flawlessly. With DWARF in .o files
      the type ID was the DIE offset in the DWARF for the .o file which is not
      unique across all .o files, so now the SymbolFileDWARFDebugMap class will
      make the .o file index part (the high 32 bits) of the unique type identifier
      so it can uniquely identify the types.
      
      llvm-svn: 142534
      81c22f61
  15. Oct 14, 2011
    • Greg Clayton's avatar
      Added the ability to run expressions in any command. Expressions can be · 5a31471e
      Greg Clayton authored
      inserted in commands by using backticks:
      
      (lldb) memory read `$rsp-16` `$rsp+16`
      (lldb) memory read  -c `(int)strlen(argv[0])` `argv[0]`
      
      The result of the expression will be inserted into the command as a sort of
      preprocess stage where this gets done first. We might need to tweak where this
      preprocess stage goes, but it is very functional already.
      
      Added ansi color support to the Debugger::FormatPrompt() so you can use things
      like "${ansi.fg.blue}" and "${ansi.bold}" many more. This helps in adding 
      colors to your prompts without needing to know the ANSI color code strings.
      
      llvm-svn: 141948
      5a31471e
  16. Oct 01, 2011
    • Greg Clayton's avatar
      Cleaned up the the code that figures out the inlined stack frames given a · 1ed54f50
      Greg Clayton authored
      symbol context that represents an inlined function. This function has been
      renamed internally to:
      
      bool
      SymbolContext::GetParentOfInlinedScope (const Address &curr_frame_pc, 
                                              SymbolContext &next_frame_sc, 
                                              Address &next_frame_pc) const;
                                              
      And externally to:
      
      SBSymbolContext
      SBSymbolContext::GetParentOfInlinedScope (const SBAddress &curr_frame_pc, 
                                                SBAddress &parent_frame_addr) const;
      
      The correct blocks are now correctly calculated.
      
      Switched the stack backtracing engine (in StackFrameList) and the address
      context printing over to using the internal SymbolContext::GetParentOfInlinedScope(...) 
      so all inlined callstacks will match exactly.
      
      llvm-svn: 140910
      1ed54f50
  17. Sep 22, 2011
    • Greg Clayton's avatar
      Converted the lldb_private::Process over to use the intrusive · c14ee32d
      Greg Clayton authored
      shared pointers.
      
      Changed the ExecutionContext over to use shared pointers for
      the target, process, thread and frame since these objects can
      easily go away at any time and any object that was holding onto
      an ExecutionContext was running the risk of using a bad object.
      
      Now that the shared pointers for target, process, thread and
      frame are just a single pointer (they all use the instrusive
      shared pointers) the execution context is much safer and still
      the same size. 
      
      Made the shared pointers in the the ExecutionContext class protected
      and made accessors for all of the various ways to get at the pointers,
      references, and shared pointers.
      
      llvm-svn: 140298
      c14ee32d
  18. Sep 20, 2011
  19. Sep 17, 2011
    • Greg Clayton's avatar
      Adopt the intrusive pointers in: · 4d122c40
      Greg Clayton authored
      lldb_private::Breakpoint
      lldb_private::BreakpointLocations
      lldb_private::BreakpointSite
      lldb_private::Debugger
      lldb_private::StackFrame
      lldb_private::Thread
      lldb_private::Target
      
      llvm-svn: 139985
      4d122c40
  20. Sep 15, 2011
    • Jim Ingham's avatar
      Track whether a process was Launched or Attached to. If Attached, the detach... · 8314c525
      Jim Ingham authored
      Track whether a process was Launched or Attached to.  If Attached, the detach when the debugger is destroyed, rather than killing the process.  Also added a Debugger::Clear, which gets called in Debugger::Destroy to deal with all the targets in the Debugger.  Also made the Driver's main loop call Destroy on the debugger, rather than just Destroying the currently selected Target's process.
      
      llvm-svn: 139853
      8314c525
  21. Sep 13, 2011
  22. Sep 09, 2011
    • Jim Ingham's avatar
      Move the SourceManager from the Debugger to the Target. That way it can store... · b7f6b2fa
      Jim Ingham authored
      Move the SourceManager from the Debugger to the Target.  That way it can store the per-Target default Source File & Line.
      Set the default Source File & line to main (if it can be found.) at startup.  Selecting the current thread & or frame resets 
      the current source file & line, and "source list" as well as the breakpoint command "break set -l <NUM>" will use the 
      current source file.
      
      llvm-svn: 139323
      b7f6b2fa
  23. Aug 25, 2011
  24. Aug 23, 2011
    • Enrico Granata's avatar
      Improved the user-friendliness of errors shown by the summary feature in certain areas · 88da35f8
      Enrico Granata authored
      Renamed format "signed decimal" to be "decimal". "unsigned decimal" remains unchanged:
       - the name "signed decimal" was interfering with symbol %S (use summary) in summary strings.
         because of the way summary strings are implemented, this did not really lead to a bug, but
         simply to performing more steps than necessary to display a summary. this is fixed.
      Documentation improvements (more on synthetic children, some information on filters). This is still a WIP.
      
      llvm-svn: 138384
      88da35f8
    • Enrico Granata's avatar
      Additional code cleanups ; Short option name for --python-script in type... · dc940730
      Enrico Granata authored
      Additional code cleanups ; Short option name for --python-script in type summary add moved from -s to -o (this is a preliminary step in moving the short option for --summary-string from -f to -s) ; Accordingly updated the test suite
      
      llvm-svn: 138315
      dc940730
  25. Aug 19, 2011
    • Enrico Granata's avatar
      - Now using ${var} as the summary for an aggregate type will produce... · d64d0bc0
      Enrico Granata authored
      - Now using ${var} as the summary for an aggregate type will produce "name-of-type @ object-location" instead of giving an error
        e.g. you may get "foo_class @ 0x123456" when typing "type summary add -f ${var} foo_class"
      - Added a new special formatting token %T for summaries. This shows the type of the object.
        Using it, the new "type @ location" summary could be manually generated by writing ${var%T} @ ${var%L}
      - Bits and pieces required to support "frame variable array[n-m]"
        The feature is not enabled yet because some additional design and support code is required, but the basics
        are getting there
      - Fixed a potential issue where a ValueObjectSyntheticFilter was not holding on to its SyntheticChildrenSP
        Because of the way VOSF are being built now, this has never been an actual issue, but it is still sensible for
        a VOSF to hold on to the SyntheticChildrenSP as well as to its FrontEnd
      
      llvm-svn: 138080
      d64d0bc0
  26. Aug 18, 2011
    • Enrico Granata's avatar
      Second round of code cleanups: · 85933ed4
      Enrico Granata authored
       - reorganizing classes layout to have public part first
         Typedefs that we want to keep private, but must be defined for some public code to work correctly are an exception
       - avoiding methods in the form T foo() { code; } all on one-line
       - moving method implementations from .h to .cpp whenever feasible
         Templatized code is an exception and so are very small methods
       - generally, adhering to coding conventions followed project-wide
      Functional changes:
       - fixed an issue where using ${var} in a summary for an aggregate, and then displaying a pointer-to-aggregate would lead to no summary being displayed
         The issue was not a major one because all ${var} was meant to do in that context was display an error for invalid use of pointer
         Accordingly fixed test cases and added a new test case
      
      llvm-svn: 137944
      85933ed4
    • Enrico Granata's avatar
      First round of code cleanups: · c482a192
      Enrico Granata authored
       - all instances of "vobj" have been renamed to "valobj"
       - class Debugger::Formatting has been renamed to DataVisualization (defined in FormatManager.h/cpp)
         The interface to this class has not changed
       - FormatCategory now uses ConstString's as keys to the navigators instead of repeatedly casting
         from ConstString to const char* and back all the time
         Next step is making the same happen for categories themselves
       - category gnu-libstdc++ is defined in the constructor for a FormatManager
         The source code for it is defined in gnu_libstdcpp.py, drawn from examples/synthetic at compile time
         All references to previous 'osxcpp' name have been removed from both code and file names
      Functional changes:
       - the name of the option to use a summary string for 'type summary add' has changed from the previous --format-string
         to the new --summary-string. It is expected that the short option will change from -f to -s, and -s for --python-script
         will become -o
      
      llvm-svn: 137886
      c482a192
  27. Aug 17, 2011
    • Enrico Granata's avatar
      New category "gnu-libstdc++" provides summary for std::string and synthetic... · 217f91fc
      Enrico Granata authored
      New category "gnu-libstdc++" provides summary for std::string and synthetic children for types std::map, std::list and std::vector
       The category is enabled by default. If you run into issues with it, disable it and the previous behavior of LLDB is restored
       ** This is a temporary solution. The general solution to having formatters pulled in at startup should involve going through the Platform.
      Fixed an issue in type synthetic list where a category with synthetic providers in it was not shown if all the providers were regex-based
      
      llvm-svn: 137850
      217f91fc
  28. Aug 15, 2011
  29. Aug 13, 2011
  30. Aug 12, 2011
    • Enrico Granata's avatar
      Added an error message when the user tries to add a filter when a synthetic... · 68eb4bb4
      Enrico Granata authored
      Added an error message when the user tries to add a filter when a synthetic provider for the same type is already defined in the same category
      The converse is also true: an error is shown when the user tries to add a synthetic provider to a category that already has a filter for the same type
      
      llvm-svn: 137493
      68eb4bb4
    • Enrico Granata's avatar
      *Some more optimizations in usage of ConstString · 22c55d18
      Enrico Granata authored
      *New setting target.max-children-count gives an upper-bound to the number of child objects that will be displayed at each depth-level
        This might be a breaking change in some scenarios. To override the new limit you can use the --show-all-children (-A) option
        to frame variable or increase the limit in your lldbinit file
      *Command "type synthetic" has been split in two:
        - "type synthetic" now only handles Python synthetic children providers
        - the new command "type filter" handles filters
        Because filters and synthetic providers are both ways to replace the children of a ValueObject, only one can be effective at any given time.
      
      llvm-svn: 137416
      22c55d18
  31. Aug 11, 2011
    • Enrico Granata's avatar
      Fixed an issue where a pointer's address was being logged instead of its value · 8c9d3560
      Enrico Granata authored
      Access to synthetic children by name:
       if your object has a synthetic child named foo you can now type
        frame variable object.foo (or ->foo if you have a pointer)
        and that will print the value of the synthetic child
        (if your object has an actual child named foo, the actual child prevails!)
       this behavior should also work in summaries, and you should be able to use
       ${var.foo} and ${svar.foo} interchangeably
        (but using svar.foo will mask an actual child named foo)
      
      llvm-svn: 137314
      8c9d3560
    • Greg Clayton's avatar
      Added the ability to remove orphaned module shared pointers from a ModuleList. · aa149cbd
      Greg Clayton authored
      This is helping us track down some extra references to ModuleSP objects that
      are causing things to get kept around for too long. 
      
      Added a module pointer accessor to target and change a lot of code to use 
      it where it would be more efficient.
      
      "taret delete" can now specify "--clean=1" which will cleanup the global module
      list for any orphaned module in the shared module cache which can save memory
      and also help track down module reference leaks like we have now.
      
      llvm-svn: 137294
      aa149cbd
  32. Aug 04, 2011
    • Enrico Granata's avatar
      New formatting symbol %# can be used in summary strings to get the "count of... · 5dfd49cc
      Enrico Granata authored
      New formatting symbol %# can be used in summary strings to get the "count of children" of a variable
       - accordingly, the test cases for the synthetic providers for the std:: containers have been edited to use
         ${svar%#} instead of ${svar.len} to print out the count of elements ; the .len synthetic child has been
         removed from the synthetic providers
      The synthetic children providers for the std:: containers now return None when asked for children indexes >= num_children()
      Basic code to support filter names based on regular expressions (WIP)
      
      llvm-svn: 136862
      5dfd49cc
  33. 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
  34. Jul 29, 2011
    • 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
  35. 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
Loading