summaryrefslogtreecommitdiffstats
path: root/lldb/source/Commands
Commit message (Collapse)AuthorAgeFilesLines
...
* *Some more optimizations in usage of ConstStringEnrico Granata2011-08-126-115/+807
| | | | | | | | | | | | *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
* changed some variables from char* to std::stringEnrico Granata2011-08-112-19/+19
| | | | llvm-svn: 137357
* Patch for "process load" by Filipe Cabecinhas.Greg Clayton2011-08-111-0/+1
| | | | | | | | | | | | | | | | | | | | | Filipe was attempting to do a: (lldb) process load ~/path/foo.dylib But the process load command wasn't resolving the path. We have to be careful about resolving the path here because we want to do it in terms of the platform we are using. the "~/" can mean a completely different path if you are remotely debugging on another machine as another user. So to support this, platforms now can resolve remote paths: bool Platform::ResolveRemotePath (const FileSpec &platform_path, FileSpec &resolved_platform_path); The host/local platform will just resolve the path. llvm-svn: 137307
* Added the ability to remove orphaned module shared pointers from a ModuleList.Greg Clayton2011-08-114-21/+40
| | | | | | | | | | | | | | 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
* renaming command "type synth" to "type synthetic" for added readabilityEnrico Granata2011-08-101-7/+7
| | | | llvm-svn: 137213
* Remove extra newline from end of 'frame info' command output.Jason Molenda2011-08-101-1/+0
| | | | llvm-svn: 137208
* While tracking down memory consumption issue a few things were needed: the Greg Clayton2011-08-101-27/+160
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ability to dump more information about modules in "target modules list". We can now dump the shared pointer reference count for modules, the pointer to the module itself (in case performance tools can help track down who has references to said pointer), and the modification time. Added "target delete [target-idx ...]" to be able to delete targets when they are no longer needed. This will help track down memory usage issues and help to resolve when module ref counts keep getting incremented. If the command gets no arguments, the currently selected target will be deleted. If any arguments are given, they must all be valid target indexes (use the "target list" command to get the current target indexes). Took care of a bunch of "no newline at end of file" warnings. TimeValue objects can now dump their time to a lldb_private::Stream object. Modified the "target modules list --global" command to not error out if there are no targets since it doesn't require a target. Fixed an issue in the MacOSX DYLD dynamic loader plug-in where if a shared library was updated on disk, we would keep using the older one, even if it was updated. Don't allow the ModuleList::GetSharedModule(...) to return an empty module. Previously we could specify a valid path on disc to a module, and specify an architecture that wasn't contained in that module and get a shared pointer to a module that wouldn't be able to return an object file or a symbol file. We now make sure an object file can be extracted prior to adding the shared pointer to the module to get added to the shared list. llvm-svn: 137196
* CFString.py now shows contents in a more NSString-like way (e.g. you get ↵Enrico Granata2011-08-094-10/+11
| | | | | | | | | | @"Hello" instead of "Hello") new --raw-output (-R) option to frame variable prevents using summaries and synthetic children other future formatting enhancements will be excluded by using the -R option test case enhanced to check that -R works correctly llvm-svn: 137185
* Added a "--global" option to the "target modules list"Greg Clayton2011-08-091-9/+39
| | | | | | | | | command that allows us to see all modules that exist and their corresponding global shared pointer count. This will help us track down memory issues when modules aren't being removed and cleaned up from the module list. llvm-svn: 137078
* Option --regex (-x) now also works for synthetic children:Enrico Granata2011-08-052-277/+375
| | | | | | | - Added a test case in python-synth Minor code improvements in categories, making them ready for adding new element types llvm-svn: 136957
* Change CommandObjectTargetModulesAdd to set the return statusJason Molenda2011-08-021-0/+1
| | | | | | object on successful adding of a module. llvm-svn: 136744
* Fixed a bug where a variable could not be formatted in a summary if its ↵Enrico Granata2011-08-021-0/+3
| | | | | | | | | | | | | 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
* Public API changes:Enrico Granata2011-07-292-20/+23
| | | | | | | | | | | | | | | | | | | | | - 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
* Indent the frames in the "thread.GetStatus" frame listing. Also put the ↵Jim Ingham2011-07-261-0/+4
| | | | | | same space after each thread listing for "thread backtrace all" as "thread backtrace 1 3 5" llvm-svn: 136052
* Python synthetic providers must provide a num_children call; this was not ↵Enrico Granata2011-07-251-4/+5
| | | | | | specified in the docs up to now llvm-svn: 135933
* new flag -P to type synth add lets you type a Python class interactivelyEnrico Granata2011-07-252-3/+249
| | | | | | | | 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
* Python synthetic children:Enrico Granata2011-07-241-35/+111
| | | | | | | | | | | | | | - 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
* when typing a summary string you can use the %S symbol to explicitly ↵Enrico Granata2011-07-225-3/+695
| | | | | | | | | | | | | | | 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
* Added KDP resume, suspend, set/remove breakpoint, and kernel version support.Greg Clayton2011-07-201-6/+12
| | | | | | Also we now display a live update of the kexts that we are loading. llvm-svn: 135563
* type category list now supports a regular expression argument that filters ↵Enrico Granata2011-07-191-14/+151
| | | | | | | | | | | | categories to only include the ones matching the regex type summary list now supports a -w flag with a regular expression argument that filters categories to only include the ones matching the regex in category and summary listings, categories are printed in a meaningful order: - enabled ones first, in the order in which they are searched for summaries - disabled ones, in an unspecified order type summary list by default only expands non-empty enabled categories. to obtain a full listing, you must use the -w flag giving a "match-all" regex llvm-svn: 135529
* Patch by Matt Johnson to silence G++ warnings!Johnny Chen2011-07-192-13/+13
| | | | | | | | Used hand merge to apply the diffs. I did not apply the diffs for FormatManager.h and the diffs for memberwise initialization for ValueObject.cpp because they changed since. I will ask my colleague to apply them later. llvm-svn: 135508
* The implementation of categories is now synchronization safeEnrico Granata2011-07-192-63/+77
| | | | | | | | | | | | | | | | | | | | | Code cleanup: - The Format Manager implementation is now split between two files: FormatClasses.{h|cpp} where the actual formatter classes (ValueFormat, SummaryFormat, ...) are implemented and FormatManager.{h|cpp} where the infrastructure classes (FormatNavigator, FormatManager, ...) are contained. The wrapper code always remains in Debugger.{h|cpp} - Several leftover fields, methods and comments from previous design choices have been removed type category subcommands (enable, disable, delete) now can take a list of category names as input - for type category enable, saying "enable A B C" is the same as saying enable C enable B enable A (the ordering is relevant in enabling categories, and it is expected that a user typing enable A B C wants to look into category A, then into B, then into C and not the other way round) - for the other two commands, the order is not really relevant (however, the same inverted ordering is used for consistency) llvm-svn: 135494
* Fixed a bug where deleting a regex summary would not immediately reflect in ↵Enrico Granata2011-07-193-88/+361
| | | | | | | | | | | | | | | | | | | | | | | | | the variables display The "systemwide summaries" feature has been removed and replaced with a more general and powerful mechanism. Categories: - summaries can now be grouped into buckets, called "categories" (it is expected that categories correspond to libraries and/or runtime environments) - to add a summary to a category, you can use the -w option to type summary add and give a category name (e.g. type summary add -f "foo" foo_t -w foo_category) - categories are by default disabled, which means LLDB will not look into them for summaries, to enable a category use "type category enable". once a category is enabled, LLDB will look into that category for summaries. the rules are quite trivial: every enabled category is searched for an exact match. if an exact match is nowhere to be found, any match is searched for in every enabled category (whether it involves cascading, going to base classes, ...). categories are searched into the order in which they were enabled (the most recently enabled category first, then the second most and so on..) - by default, most commands that deal with summaries, use a category named "default" if no explicit -w parameter is given (the observable behavior of LLDB should not change when categories are not explicitly used) - the systemwide summaries are now part of a "system" category llvm-svn: 135463
* Some descriptive text for the Python script feature:Enrico Granata2011-07-165-6/+24
| | | | | | | | | | | | | | | - help type summary add now gives some hints on how to use it frame variable and target variable now have a --no-summary-depth (-Y) option: - simply using -Y without an argument will skip one level of summaries, i.e. your aggregate types will expand their children and display no summary, even if they have one. children will behave normally - using -Y<int>, as in -Y4, -Y7, ..., will skip as many levels of summaries as given by the <int> parameter (obviously, -Y and -Y1 are the same thing). children beneath the given depth level will behave normally -Y0 is the same as omitting the --no-summary-depth parameter entirely This option replaces the defined-but-unimplemented --no-summary llvm-svn: 135336
* System-wide summaries:Enrico Granata2011-07-152-433/+758
| | | | | | | | | | | - Summaries for char*, const char* and char[] are loaded at startup as system-wide summaries. This means you cannot delete them unless you use the -a option to type summary delete/clear - You can add your own system-wide summaries by using the -w option to type summary add Several code improvements for the Python summaries feature llvm-svn: 135326
* Python summary strings:Enrico Granata2011-07-151-23/+353
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | - you can use a Python script to write a summary string for data-types, in one of three ways: -P option and typing the script a line at a time -s option and passing a one-line Python script -F option and passing the name of a Python function these options all work for the "type summary add" command your Python code (if provided through -P or -s) is wrapped in a function that accepts two parameters: valobj (a ValueObject) and dict (an LLDB internal dictionary object). if you use -F and give a function name, you're expected to define the function on your own and with the right prototype. your function, however defined, must return a Python string - test case for the Python summary feature - a few quirks: Python summaries cannot have names, and cannot use regex as type names both issues will be fixed ASAP major redesign of type summary code: - type summary working with strings and type summary working with Python code are two classes, with a common base class SummaryFormat - SummaryFormat classes now are able to actively format objects rather than just aggregating data - cleaner code to print descriptions for summaries the public API now exports a method to easily navigate a ValueObject hierarchy New InputReaderEZ and PriorityPointerPair classes Several minor fixes and improvements llvm-svn: 135238
* Fix short description of 'target variable' command.Johnny Chen2011-07-121-2/+2
| | | | llvm-svn: 135005
* Added "command history" command to dump the command history.Jim Ingham2011-07-121-0/+127
| | | | | | | | | | | | | | | | | Also made: (lldb) !<NUM> (lldb) !-<NUM> (lldb) !! work with the history. For added benefit: (lldb) !<NUM><TAB> will insert the command at position <NUM> in the history into the command line to be edited. This is only partial, I still need to sync up editline's history list with the one kept by the interpreter. llvm-svn: 134955
* named summaries:Enrico Granata2011-07-122-18/+62
| | | | | | | | | | | | - a new --name option for "type summary add" lets you give a name to a summary - a new --summary option for "frame variable" lets you bind a named summary to one or more variables ${var%s} now works for printing the value of 0-terminated CStrings type format test case now tests for cascading - this is disabled on GCC because GCC may end up stripping typedef chains, basically breaking cascading new design for the FormatNavigator class new template class CleanUp2 meant to support cleanup routines with 1 additional parameter beyond resource handle llvm-svn: 134943
* Allow the built in ValueObject summary providers for C stringsGreg Clayton2011-07-102-7/+13
| | | | | | | | | | | | | | | | | | | use lldb_private::Target::ReadMemory(...) to allow constant strings to be displayed in global variables prior on in between process execution. Centralized the variable declaration dumping into: bool Variable::DumpDeclaration (Stream *s, bool show_fullpaths, bool show_module); Fixed an issue if you used "target variable --regex <regex>" where the variable name would not be displayed, but the regular expression would. Fixed an issue when viewing global variables through "target variable" might not display correctly when doing DWARF in object files. llvm-svn: 134878
* Fixed the global and static variables to always be in scope.Greg Clayton2011-07-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Made it so that you can create synthetic children of array value objects. This is for creating array members when the array index is out of range. This comes in handy when you have a structure definition like: struct Collection { uint32_t count; Item array[0]; }; "array" has 1 item, but many times in practice there are more items in "item_array". This allows you to do: (lldb) target variable g_collection.array[3] To implement this, the get child at index has been modified to have a "ignore_array_bounds" boolean that can be set to true. llvm-svn: 134846
* Allow reading memory from files before the target has been run.Jim Ingham2011-07-091-4/+5
| | | | llvm-svn: 134780
* Added the ability to see global variables with a variable expression path soGreg Clayton2011-07-081-62/+98
| | | | | | | | | | you can do things like: (lldb) target variable g_global.a (lldb) target variable *g_global.ptr (lldb) target variable g_global.ptr[1] llvm-svn: 134745
* Switch to using the S_ISDIR and S_ISREG sys/stat.h macros inJason Molenda2011-07-081-1/+1
| | | | | | | CommandCompletions.cpp and DataBufferMemoryMap.cpp. The file type part of the st_mode struct member is not a bitmask. llvm-svn: 134669
* Stop the lldb_private::RegularExpression class from implicitlyGreg Clayton2011-07-071-1/+1
| | | | | | | constructing itself and causing unexpected things to happen in LLDB. llvm-svn: 134598
* Centralize the variable display prefs into a new optionGreg Clayton2011-07-072-127/+92
| | | | | | | | | | | | | group class: OptionGroupVariable. It gets initialized with a boolean that indicates if the frame specific options are included so that this can be used in both the "frame variable" and "target variable" commands. Removed the global functionality from the "frame variable" command. Users should switch to using the "target variable" command. llvm-svn: 134594
* Added "target variable" command that allows introspection of globalGreg Clayton2011-07-072-34/+142
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | variables prior to running your binary. Zero filled sections now get section data correctly filled with zeroes when Target::ReadMemory reads from the object file section data. Added new option groups and option values for file lists. I still need to hook up all of the options to "target variable" to allow more complete introspection by file and shlib. Added the ability for ValueObjectVariable objects to be created with only the target as the execution context. This allows them to be read from the object files through Target::ReadMemory(...). Added a "virtual Module * GetModule()" function to the ValueObject class. By default it will look to the parent variable object and return its module. The module is needed when we have global variables that have file addresses (virtual addresses that are specific to module object files) and in turn allows global variables to be displayed prior to running. Removed all of the unused proxy object support that bit rotted in lldb_private::Value. Replaced a lot of places that used "FileSpec::Compare (lhs, rhs) == 0" code with the more efficient "FileSpec::Equal (lhs, rhs)". Improved logging in GDB remote plug-in. llvm-svn: 134579
* new detailed descriptions for type summary add and type format addEnrico Granata2011-07-071-4/+105
| | | | | | | some changes to the help system code for better display of long help text -p and -r flags now also work for type format add llvm-svn: 134574
* Cleanup errors that come out of commands and make sure they all have newlinesGreg Clayton2011-07-021-12/+12
| | | | | | | | | | | | | _only_ in the resulting stream, not in the error objects (lldb_private::Error). lldb_private::Error objects should always just have an error string with no terminating newline characters or periods. Fixed an issue with GDB remote packet detection that could end up deadlocking if a full packet wasn't received in one chunk. Also modified the packet checking function to properly toss one or more bytes when it detects bad data. llvm-svn: 134357
* several improvements to "type summary":Enrico Granata2011-07-021-79/+126
| | | | | | | | | | | | | - type names can now be regular expressions (exact matching is done first, and is faster) - integral (and floating) types can be printed as bitfields, i.e. ${var[low-high]} will extract bits low thru high of the value and print them - array subscripts are supported, both for arrays and for pointers. the syntax is ${*var[low-high]}, or ${*var[]} to print the whole array (the latter only works for statically sized arrays) - summary is now printed by default when a summary string references a variable. if that variable's type has no summary, value is printed instead. to force value, you can use %V as a format specifier - basic support for ObjectiveC: - ObjectiveC inheritance chains are now walked through - %@ can be specified as a summary format, to print the ObjectiveC runtime description for an object - some bug fixes llvm-svn: 134293
* This commit adds a new top subcommand "summary" to command type named ↵Enrico Granata2011-06-291-40/+512
| | | | | | | | | | | | | | | | | | | | | | | "type". Currently this command implements three commands: type summary add <format> <typename1> [<typename2> ...] type summary delete <typename1> [<typename2> ...] type summary list [<typename1> [<typename2>] ...] type summary clear This allows you to specify the default format that will be used to display summaries for variables, shown when you use "frame variable" or "expression", or the SBValue classes. Examples: type summary add "x = ${var.x}" Point type summary list type summary add --one-liner SimpleType llvm-svn: 134108
* Remove the disassembly option: "eOptionShowCurrentLine" and replaced it withGreg Clayton2011-06-281-3/+5
| | | | | | | | | | | | | | two: eOptionMarkPCSourceLine = (1u << 2), // Mark the source line that contains the current PC (mixed mode only) eOptionMarkPCAddress = (1u << 3) // Mark the disassembly line the contains the PC This allows mixed mode to show the line that contains the current PC, and it allows us to mark the PC address in the disassembly if desired. Having these be separate gives more control on the disassembly output. SBFrame::Disassemble() doesn't enable any of these options. llvm-svn: 134019
* Cleanup error output on expressions. Greg Clayton2011-06-241-1/+16
| | | | llvm-svn: 133834
* Add an initial test file for the newly added data formatter command.Johnny Chen2011-06-231-2/+6
| | | | | | | | main.cpp is contributed from Enrico. Modify CommandObjectType.cpp to set status on the CommandReturnObject when succeeded as well. llvm-svn: 133772
* Centralized all of the format to c-string and to format character code insideGreg Clayton2011-06-232-69/+13
| | | | | | | | | | | | | | | the FormatManager class. Modified the format arguments in any commands to be able to use a single character format, or a full format name, or a partial format name if no full format names match. Modified any code that was displaying formats to use the new FormatManager calls so that our help text and errors never get out of date. Modified the display of the "type format list" command to be a bit more human readable by showing the format as a format string rather than the single character format char. llvm-svn: 133765
* Committing type format code for Enrico Granata.Greg Clayton2011-06-232-0/+457
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a new top level command named "type". Currently this command implements three commands: type format add <format> <typename1> [<typename2> ...] type format delete <typename1> [<typename2> ...] type format list [<typename1> [<typename2>] ...] This allows you to specify the default format that will be used to display types when you use "frame variable" or "expression", or the SBValue classes. Examples: // Format uint*_t as hex type format add x uint16_t uint32_t uint64_t // Format intptr_t as a pointer type format add p intptr_t The format characters are the same as "printf" for the most part with many additions. These format character specifiers are also used in many other commands ("frame variable" for one). The current list of format characters include: a - char buffer b - binary B - boolean c - char C - printable char d - signed decimal e - float f - float g - float i - signed decimal I - complex integer o - octal O - OSType p - pointer s - c-string u - unsigned decimal x - hex X - complex float y - bytes Y - bytes with ASCII llvm-svn: 133728
* Fixed an issue where SBFrame::GetDisassembly() was returning disassembly thatGreg Clayton2011-06-221-6/+13
| | | | | | | contained the current line marker. This is now an option which is not enabled for the API disassembly call. llvm-svn: 133597
* The "-r" option should work for both "-n" and "-s", but it was only set to ↵Jim Ingham2011-06-201-1/+3
| | | | | | work for "-s". llvm-svn: 133479
* Added a new format for displaying an array of characters: eFormatCharArrayGreg Clayton2011-06-171-0/+2
| | | | | | | | | | | | | | This us useful because sometomes you have to show a single character as: 'a' (using eFormatChar) and other times you might have an array of single charcters for display as: 'a' 'b' 'c', and other times you might want to show the contents of buffer of characters that can contain non printable chars: "\0\x22\n123". This also fixes an issue that currently happens when you have a single character C string (const char *a = "a"; or char b[1] = { 'b' };) that was being output as "'a'" incorrectly due to the way the eFormatChar format output worked. llvm-svn: 133316
* Add 'batch_mode' to CommandInterpreter. Modify InputReaders toCaroline Tice2011-06-164-36/+65
| | | | | | | | | | not write output (prompts, instructions,etc.) if the CommandInterpreter is in batch_mode. Also, finish updating InputReaders to write to the asynchronous stream, rather than using the Debugger's output file directly. llvm-svn: 133162
OpenPOWER on IntegriCloud