summaryrefslogtreecommitdiffstats
path: root/lldb/source/Commands
Commit message (Collapse)AuthorAgeFilesLines
...
* Using the new ScriptInterpreterObject in the implementation of synthetic ↵Enrico Granata2012-03-063-47/+18
| | | | | | | | | children to enhance type safety Several places in the ScriptInterpreter interface used StringList objects where an std::string would suffice - Fixed Refactoring calls that generated special-purposes functions in the Python interpreter to use helper functions instead of duplicating blobs of code llvm-svn: 152164
* rdar://problem/10267705Johnny Chen2012-03-061-1/+3
| | | | | | | Clarification on the error message when the display format (eFormatBytes/eFormatBytesWithASCII) conflicts with the byte size. llvm-svn: 152084
* Add a command and an SB API to create exception breakpoints. Make the break ↵Jim Ingham2012-03-062-18/+91
| | | | | | output prettier for Exception breakpoints. llvm-svn: 152081
* 1) solving a bug where, after Jim's fixes to stack frames, synthetic ↵Enrico Granata2012-03-014-49/+47
| | | | | | | | | | | | | | | | | children were not recalculated when necessary, causing them to get out of sync with live data 2) providing an updated list of tagged pointers values for the objc_runtime module - hopefully this one is final 3) changing ValueObject::DumpValueObject to use an Options class instead of providing a bulky list of parameters to pass around this change had been laid out previously, but some clients of DumpValueObject() were still using the old prototype and some arguments were treated in a special way and passed in directly instead of through the Options class 4) providing new GetSummaryAsCString() and GetValueAsCString() calls in ValueObject that are passed a formatter object and a destination string and fill the string by formatting themselves using the formatter argument instead of the default for the current ValueObject 5) removing the option to have formats and summaries stick to a variable for the current stoppoint after some debate, we are going with non-sticky: if you say frame variable --format hex foo, the hex format will only be applied to the current command execution and not stick when redisplaying foo the other option would be full stickiness, which means that foo would be formatted as hex for its whole lifetime we are open to suggestions on what feels "natural" in this regard llvm-svn: 151801
* Make the StackFrameList::GetFrameAtIndex only fetch as many stack frames as ↵Jim Ingham2012-02-291-3/+5
| | | | | | | | | needed to get the frame requested. <rdar://problem/10943135> llvm-svn: 151705
* Made a ModuleSpec class in Module.h which can specify a module using one orGreg Clayton2012-02-262-42/+45
| | | | | | | | | | | | | | | | | | more of the local path, platform path, associated symbol file, UUID, arch, object name and object offset. This allows many of the calls that were GetSharedModule to reduce the number of arguments that were used in a call to these functions. It also allows a module to be created with a ModuleSpec which allows many things to be specified prior to any accessors being called on the Module class itself. I was running into problems when adding support for "target symbol add" where you can specify a stand alone debug info file after debugging has started where I needed to specify the associated symbol file path and if I waited until after construction, the wrong symbol file had already been located. By using the ModuleSpec it allows us to construct a module with as little or as much information as needed and not have to change the parameter list. llvm-svn: 151476
* <rdar://problem/10103468>Greg Clayton2012-02-243-19/+216
| | | | | | | | | | | | | | | | | | | | | | | | | I started work on being able to add symbol files after a debug session had started with a new "target symfile add" command and quickly ran into problems with stale Address objects in breakpoint locations that had lldb_private::Section pointers into modules that had been removed or replaced. This also let to grabbing stale modules from those sections. So I needed to thread harded the Address, Section and related objects. To do this I modified the ModuleChild class to now require a ModuleSP on initialization so that a weak reference can created. I also changed all places that were handing out "Section *" to have them hand out SectionSP. All ObjectFile, SymbolFile and SymbolVendors were inheriting from ModuleChild so all of the find plug-in, static creation function and constructors now require ModuleSP references instead of Module *. Address objects now have weak references to their sections which can safely go stale when a module gets destructed. This checkin doesn't complete the "target symfile add" command, but it does get us a lot clioser to being able to do such things without a high risk of crashing or memory corruption. llvm-svn: 151336
* Add a logging mode that takes a callback and flush'es to that callback.Jim Ingham2012-02-211-53/+11
| | | | | | Also add SB API's to set this callback, and to enable the log channels. llvm-svn: 151018
* Thread hardening part 3. Now lldb_private::Thread objects have std::weak_ptrGreg Clayton2012-02-212-10/+14
| | | | | | | | | | | | | | | | | objects for the backlink to the lldb_private::Process. The issues we were running into before was someone was holding onto a shared pointer to a lldb_private::Thread for too long, and the lldb_private::Process parent object would get destroyed and the lldb_private::Thread had a "Process &m_process" member which would just treat whatever memory that used to be a Process as a valid Process. This was mostly happening for lldb_private::StackFrame objects that had a member like "Thread &m_thread". So this completes the internal strong/weak changes. Documented the ExecutionContext and ExecutionContextRef classes so that our LLDB developers can understand when and where to use ExecutionContext and ExecutionContextRef objects. llvm-svn: 151009
* The second part in thread hardening the internals of LLDB where we makeGreg Clayton2012-02-181-2/+3
| | | | | | | | | | | | | | | | the lldb_private::StackFrame objects hold onto a weak pointer to the thread object. The lldb_private::StackFrame objects the the most volatile objects we have as when we are doing single stepping, frames can often get lost or thrown away, only to be re-created as another object that still refers to the same frame. We have another bug tracking that. But we need to be able to have frames no longer be able to get the thread when they are not part of a thread anymore, and this is the first step (this fix makes that possible but doesn't implement it yet). Also changed lldb_private::ExecutionContextScope to return shared pointers to all objects in the execution context to further thread harden the internals. llvm-svn: 150871
* Remove unneeded includes.Jim Ingham2012-02-171-1/+0
| | | | llvm-svn: 150843
* Add a general mechanism to wait on the debugger for Broadcasters of a given ↵Jim Ingham2012-02-161-1/+1
| | | | | | | | | class/event bit set. Use this to allow the lldb Driver to emit notifications for breakpoint modifications. <rdar://problem/10619974> llvm-svn: 150665
* <rdar://problem/10062621>Enrico Granata2012-02-152-75/+77
| | | | | | | | | | | | | | | | | | 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
* Remove the functionality of using 'frame variable -w' to set a watchpoint ↵Johnny Chen2012-02-141-73/+1
| | | | | | | | now that 'watchpoint set variable/expression' is working. Also update the relevant test cases. llvm-svn: 150514
* Full core file support has been added for mach-o core files.Greg Clayton2012-02-131-13/+25
| | | | | | | | | | | | | | | | Tracking modules down when you have a UUID and a path has been improved. DynamicLoaderDarwinKernel no longer parses mach-o load commands and it now uses the memory based modules now that we can load modules from memory. Added a target setting named "target.exec-search-paths" which can be used to supply a list of directories to use when trying to look for executables. This allows one or more directories to be used when searching for modules that may not exist in the SDK/PDK. The target automatically adds the directory for the main executable to this list so this should help us in tracking down shared libraries and other binaries. llvm-svn: 150426
* Made the "--no-inlines" option onSean Callanan2012-02-111-8/+15
| | | | | | | | | | | | "target modules lookup" also work with the "--function" option, so you can search for functions that aren't inlined. This is the same query that the expression parser makes, so it's good for diagnosing situations where the expression parser doesn't find a function you think should be there. llvm-svn: 150289
* Make the output from "target modules lookup -n"Sean Callanan2012-02-111-1/+10
| | | | | | prettier. llvm-svn: 150285
* Extended function lookup to allow the user toSean Callanan2012-02-103-3/+8
| | | | | | | | | indicate whether inline functions are desired. This allows the expression parser, for instance, to filter out inlined functions when looking for functions it can call. llvm-svn: 150279
* Add error handling for missing option terminator "--" and a test scenario ↵Johnny Chen2012-02-091-6/+15
| | | | | | | | for it. Also fix a logic error for a missing return stmt. Oops. llvm-svn: 150195
* First pass at mach-o core file support is in. It currently works for x86_64 Greg Clayton2012-02-092-9/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | user space programs. The core file support is implemented by making a process plug-in that will dress up the threads and stack frames by using the core file memory. Added many default implementations for the lldb_private::Process functions so that plug-ins like the ProcessMachCore don't need to override many many functions only to have to return an error. Added new virtual functions to the ObjectFile class for extracting the frozen thread states that might be stored in object files. The default implementations return no thread information, but any platforms that support core files that contain frozen thread states (like mach-o) can make a module using the core file and then extract the information. The object files can enumerate the threads and also provide the register state for each thread. Since each object file knows how the thread registers are stored, they are responsible for creating a suitable register context that can be used by the core file threads. Changed the process CreateInstace callbacks to return a shared pointer and to also take an "const FileSpec *core_file" parameter to allow for core file support. This will also allow for lldb_private::Process subclasses to be made that could load crash logs. This should be possible on darwin where the crash logs contain all of the stack frames for all of the threads, yet the crash logs only contain the registers for the crashed thrad. It should also allow some variables to be viewed for the thread that crashed. llvm-svn: 150154
* After discussions with Jim and Greg, modify the 'watchpoint set' command to ↵Johnny Chen2012-02-083-170/+269
| | | | | | | | | | | | | | | | become a mutiword command with subcommand 'expression' and 'variable'. The first subcommand is for supplying an expression to be evaluated into an address to watch for, while the second is for watching a variable. 'watchpoint set expression' is a raw command, which means that you need to use the "--" option terminator to end the '-w' or '-x' option processing and to start typing your expression. Also update several test cases to comply and add a couple of test cases into TestCompletion.py, in particular, test that 'watchpoint set ex' completes to 'watchpoint set expression ' and that 'watchpoint set var' completes to 'watchpoint set variable '. llvm-svn: 150109
* Send Breakpoint Changed events for all the relevant changes to breakpoints.Jim Ingham2012-02-081-8/+8
| | | | | | | Also, provide and use accessors for the thread options on breakpoints so we can control sending the appropriate events. llvm-svn: 150057
* Clarify the 'frame variable' help message regarding the watchpoint ↵Johnny Chen2012-02-081-1/+4
| | | | | | functionality. llvm-svn: 150039
* Update comment.Johnny Chen2012-02-081-1/+2
| | | | llvm-svn: 150036
* Refine the 'watchpoint set' command to now require either the '-v' option ↵Johnny Chen2012-02-082-43/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (for watching of a variable) or the '-e' option (for watching of an address) to be present. Update some existing test cases with the required option and add some more test cases. Since the '-v' option takes <variable-name> and the '-e' option takes <expr> as the command arg, the existing infrastructure for generating the option usage can produce confusing help message, like: watchpoint set -e [-w <watch-type>] [-x <byte-size>] <variable-name | expr> watchpoint set -v [-w <watch-type>] [-x <byte-size>] <variable-name | expr> The solution adopted is to provide an extra member field to the struct CommandArgumentData called (uint32_t)arg_opt_set_association, whose purpose is to link this particular argument data with some option set(s). Also modify the signature of CommandObject::GetFormattedCommandArguments() to: GetFormattedCommandArguments (Stream &str, uint32_t opt_set_mask = LLDB_OPT_SET_ALL) it now takes an additional opt_set_mask which can be used to generate a filtered formatted command args for help message. Options::GenerateOptionUsage() impl is modified to call the GetFormattedCommandArguments() appropriately. So that the help message now looks like: watchpoint set -e [-w <watch-type>] [-x <byte-size>] <expr> watchpoint set -v [-w <watch-type>] [-x <byte-size>] <variable-name> rdar://problem/10703256 llvm-svn: 150032
* Add help string for 'frame variable' to link to 'watchpoint set' which ↵Johnny Chen2012-02-061-1/+3
| | | | | | | | allows for using an expression to specify the address to watch for. rdar://problem/10703290 llvm-svn: 149917
* <rdar://problem/10560053>Greg Clayton2012-02-051-84/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed "target modules list" (aliased to "image list") to output more information by default. Modified the "target modules list" to have a few new options: "--header" or "-h" => show the image header address "--offset" or "-o" => show the image header address offset from the address in the file (the slide applied to the shared library) Removed the "--symfile-basename" or "-S" option, and repurposed it to "--symfile-unique" "-S" which will show the symbol file if it differs from the executable file. ObjectFile's can now be loaded from memory for cases where we don't have the files cached locally in an SDK or net mounted root. ObjectFileMachO can now read mach files from memory. Moved the section data reading code into the ObjectFile so that the object file can get the section data from Process memory if the file is only in memory. lldb_private::Module can now load its object file in a target with a rigid slide (very common operation for most dynamic linkers) by using: bool Module::SetLoadAddress (Target &target, lldb::addr_t offset, bool &changed) lldb::SBModule() now has a new constructor in the public interface: SBModule::SBModule (lldb::SBProcess &process, lldb::addr_t header_addr); This will find an appropriate ObjectFile plug-in to load an image from memory where the object file header is at "header_addr". llvm-svn: 149804
* Added a new --omit-names (-O, uppercase letter o) option to "type summary add".Enrico Granata2012-02-021-73/+28
| | | | | | | | | | When used in conjunction with --inline-children, this option will cause the names of the values to be omitted from the output. This can be beneficial in cases such as vFloat, where it will compact the representation from ([0]=1,[1]=2,[2]=3,[3]=4) to (1, 2, 3, 4). Added a test case to check that the new option works correctly. Also took some time to revisit SummaryFormat and related classes and tweak them for added readability and maintainability. Finally, added a new class name to which the std::string summary should be applied. llvm-svn: 149644
* quick fixes for two issues that were causing LLDB to crashEnrico Granata2012-01-311-3/+6
| | | | llvm-svn: 149338
* Trivial indentation change.Johnny Chen2012-01-301-1/+2
| | | | llvm-svn: 149297
* Add "watch set" command as a more general interface in conjunction with ↵Johnny Chen2012-01-302-1/+233
| | | | | | | | | | | | | | | | | | | | "frame var -w". Also add test cases for watching a variable as well as a location expressed as an expression. o TestMyFirstWatchpoint.py: Modified to test "watchpoint set -w write global". o TestWatchLocationWithWatchSet.py: Added to test "watchpoint set -w write -x 1 g_char_ptr + 7" where a contrived example program with several threads is supposed to only access the array index within the range [0..6], but there's some misbehaving thread writing past the range. rdar://problem/10701761 llvm-svn: 149280
* Switching back to using std::tr1::shared_ptr. We originally switched awayGreg Clayton2012-01-294-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Emit the message about putting ' -- ' between the end of command options and ↵Johnny Chen2012-01-271-2/+4
| | | | | | | | the raw input conditionally, that is, only if the command object does not want completion. An example is the "settings set" command. llvm-svn: 149139
* There is no need to hold onto an ExecutionContext as a member variable. Greg Clayton2012-01-272-7/+4
| | | | | | | ExecutionContext objects have shared pointers to Target, Process, Thread and Frame objects and they can end up being held onto for too long. llvm-svn: 149133
* Fixed an issue that could happen during global object destruction in ourGreg Clayton2012-01-271-3/+3
| | | | | | | map that tracks all live Module classes. We must leak our mutex for our collection class as it might be destroyed in an order we can't control. llvm-svn: 149131
* Fixed formats being able to be applied recursively when using:Greg Clayton2012-01-264-12/+18
| | | | | | | | target variable -f <format> [args] frame variable -f <format> [args] expression -f <format> -- expr llvm-svn: 149080
* Followup check in for http://llvm.org/viewvc/llvm-project?rev=148491&view=rev,Johnny Chen2012-01-232-45/+84
| | | | | | | | | where we changed the CommandObjectSettingsSet object impl to require raw command string. Do the same for CommandObjectSettingsAppend/InsertBefore/InsertAfter classes and add test cases for basic functionalities as well as for variable name completion. llvm-svn: 148719
* Followup check in for http://llvm.org/viewvc/llvm-project?rev=148491&view=rev,Johnny Chen2012-01-212-14/+27
| | | | | | | | | | where we changed the CommandObjectSettingsSet object impl to require raw command string. Do the same for CommandObjectSettingsReplace class and add two test cases; one for the "settings replace" command and the other to ensure that completion for variable name still works. llvm-svn: 148615
* o CommandObjectSettingsSet.cpp:Johnny Chen2012-01-201-1/+9
| | | | | | | | | | | | | | Fix a bug where "settings set -r th" wouldn't complete. o UserSettingsController.cpp: Fix a bug where "settings set target.process." wouldn't complete. o test/functionalities/completion: Add various completion test cases related to 'settings set' command. llvm-svn: 148596
* rdar://problem/10724187Johnny Chen2012-01-191-0/+4
| | | | | | | | http://llvm.org/viewvc/llvm-project?rev=148491&view=rev check in broke the argument completion for "settings set th", followed by TAB. Provide a way for commands who want raw commands to hook into the completion mechanism. llvm-svn: 148500
* rdar://problem/10712130Johnny Chen2012-01-192-15/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed an issue where backtick char is not properly honored when setting the frame-format variable, like the following: (lldb) settings set frame-format frame #${frame.index}: ${frame.pc}{ ${module.file.basename}{`${function.name-with-args}${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n (lldb) settings show frame-format frame-format (string) = "frame #${frame.index}: ${frame.pc}{ `${module.file.basename}{${function.name-with-args}${function.pc-offset}}}{` at ${line.file.basename}:${line.number}}\n" (lldb) o CommandObjectSettings.h/.cpp: Modify the command object impl to require raw command string instead of parsed command string, which also fixes an outstanding issue that customizing the prompt with trailing spaces doesn't work. o Args.cpp: During CommandInterpreter::HandleCommand(), there is a PreprocessCommand phase which already strips/processes pairs of backticks as an expression eval step. There's no need to treat a backtick as starting a quote. o TestAbbreviations.py and change_prompt.lldb: Fixed incorrect test case/logic. o TestSettings.py: Remove expectedFailure decorator. llvm-svn: 148491
* When doing a "target modules lookup --address <addr>", show the file addressGreg Clayton2012-01-101-5/+3
| | | | | | | in the module when dumping the information in addition to all info that we were previously showing. llvm-svn: 147815
* The "desired result type" code in the expressionSean Callanan2011-12-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | parser has hitherto been an implementation waiting for a use. I have now tied the '-o' option for the expression command -- which indicates that the result is an Objective-C object and needs to be printed -- to the ExpressionParser, which communicates the desired type to Clang. Now, if the result of an expression is determined by an Objective-C method call for which there is no type information, that result is implicitly cast to id if and only if the -o option is passed to the expression command. (Otherwise if there is no explicit cast Clang will issue an error. This behavior is identical to what happened before r146756.) Also added a testcase for -o enabled and disabled. llvm-svn: 147099
* Add the ability to capture the return value in a thread's stop info, and ↵Jim Ingham2011-12-171-1/+1
| | | | | | | | | | | | | print it 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
* Added a new class called lldb_private::SymbolFileType which is designed toGreg Clayton2011-12-081-37/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | take a SymbolFile reference and a lldb::user_id_t and be used in objects which represent things in debug symbols that have types where we don't need to know the true type yet, such as in lldb_private::Variable objects. This allows us to defer resolving the type until something is used. More specifically this allows us to get 1000 local variables from the current function, and if the user types "frame variable argc", we end up _only_ resolving the type for "argc" and not for the 999 other local variables. We can expand the use of this as needed in the future. Modified the DWARFMappedHash class to be able to read the HashData that has more than just the DIE offset. It currently will read the atoms in the header definition and read the data correctly. Currently only the DIE offset and type flags are supported. This is needed for adding type flags to the .apple_types hash accelerator tables. Fixed a assertion crash that would happen if we have a variable that had a DW_AT_const_value instead of a location where "location.LocationContains_DW_OP_addr()" would end up asserting when it tried to parse the variable location as a DWARF opcode list. Decreased the amount of memory that LLDB would use when evaluating an expression by 3x - 4x for clang. There was a place in the namespace lookup code that was parsing all namespaces with a certain name in a DWARF file instead of stopping when it found the first match. This was causing all of the compile units with a matching namespace to get parsed into memory and causing unnecessary memory bloat. Improved "Target::EvaluateExpression(...)" to not try and find a variable when the expression contains characters that would certainly cause an expression to need to be evaluated by the debugger. llvm-svn: 146130
* Process IDs (lldb::pid_t) and thread IDs (lldb::tid_t) are now 64 bit. This Greg Clayton2011-12-012-4/+4
| | | | | | | | will allow us to represent a process/thread ID using a pointer for the OS plug-ins where they might want to represent the process or thread ID using the address of the process or thread structure. llvm-svn: 145644
* I broke the test suite (4 failures) with r145459 check-in.Johnny Chen2011-11-301-0/+1
| | | | | | Fix the breakage by properly setting the result status before returning. llvm-svn: 145507
* Remove possible cut-and-paste code which doesn't belong.Johnny Chen2011-11-291-7/+1
| | | | llvm-svn: 145459
* Missing return in error handling for "source list".Jim Ingham2011-11-291-0/+1
| | | | llvm-svn: 145435
* <rdar://problem/10429064>Greg Clayton2011-11-291-83/+2
| | | | | | | | Fixed an issue where if we are debugging on a remote platform and set a platform path for our executable, it was not being honored by the new launch functions that used the ProcessLaunchInfo. llvm-svn: 145371
OpenPOWER on IntegriCloud