summaryrefslogtreecommitdiffstats
path: root/lldb/test
Commit message (Collapse)AuthorAgeFilesLines
* Add a stronger assert for the test to ensure that the visited items from ↵Johnny Chen2011-07-251-0/+9
| | | | | | | | iterating through the SBValue.linked_list_iter() API is equal to [1, 2, 4, 5]. llvm-svn: 135944
* Provide an add-on API to SBValue class by post-processing to provide a wayJohnny Chen2011-07-253-0/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to iterate through an SBValue instance by treating it as the head of a linked list. API program must provide two args to the linked_list_iter() method: the first being the child member name which points to the next item on the list and the second being a Python function which an SBValue (for the next item) and returns True if end of list is reached, otherwise it returns False. For example, suppose we have the following sample program. #include <stdio.h> class Task { public: int id; Task *next; Task(int i, Task *n): id(i), next(n) {} }; int main (int argc, char const *argv[]) { Task *task_head = new Task(-1, NULL); Task *task1 = new Task(1, NULL); Task *task2 = new Task(2, NULL); Task *task3 = new Task(3, NULL); // Orphaned. Task *task4 = new Task(4, NULL); Task *task5 = new Task(5, NULL); task_head->next = task1; task1->next = task2; task2->next = task4; task4->next = task5; int total = 0; // Break at this line Task *t = task_head; while (t != NULL) { if (t->id >= 0) ++total; t = t->next; } printf("We have a total number of %d tasks\n", total); return 0; } The test program produces the following output while exercising the linked_list_iter() SBVAlue API: task_head: TypeName -> Task * ByteSize -> 8 NumChildren -> 2 Value -> 0x0000000106400380 ValueType -> local_variable Summary -> None IsPointerType -> True Location -> 0x00007fff65f06e60 (Task *) next = 0x0000000106400390 (int) id = 1 (Task *) next = 0x00000001064003a0 (Task *) next = 0x00000001064003a0 (int) id = 2 (Task *) next = 0x00000001064003c0 (Task *) next = 0x00000001064003c0 (int) id = 4 (Task *) next = 0x00000001064003d0 (Task *) next = 0x00000001064003d0 (int) id = 5 (Task *) next = 0x0000000000000000 llvm-svn: 135938
* new flag -P to type synth add lets you type a Python class interactivelyEnrico Granata2011-07-251-1/+1
| | | | | | | | 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-244-0/+169
| | | | | | | | | | | | | | - 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
* Add an additional formatter class RecursiveDecentFormatter which prints theJohnny Chen2011-07-223-10/+75
| | | | | | | | | | | | | | | | | value and the decendents. For an example, rdf = lldbutil.RecursiveDecentFormatter(indent_child=2) print rdf.format(g_table) produces: (const char **[2]) g_table = 0x00000001055a80f0 (location) (const char **) [0] = 0x00000001055a8080 (const char *) *[0] = "Sunday" (const char **) [1] = 0x00000001055a80c0 (const char *) *[1] = "Monday" llvm-svn: 135815
* Add new API for SBAddress to the fuzz test:Johnny Chen2011-07-221-0/+1
| | | | | | | SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target); llvm-svn: 135793
* some editing of data visualization error messages to make them more meaningfulEnrico Granata2011-07-221-2/+3
| | | | | | | debugging printfs() for data visualization turned into a meaningful log: - introduced a new log category `types' in channel `lldb' llvm-svn: 135773
* Make the SBAddress class easier to use when using the publicGreg Clayton2011-07-221-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | API. SBTarget changes include changing: bool SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr, lldb::SBAddress& addr); to be: lldb::SBAddress SBTarget::ResolveLoadAddress (lldb::addr_t vm_addr); SBAddress can how contruct itself using a load address and a target which can be used to resolve the address: SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target); This will actually just call the new SetLoadAddress accessor: void SetLoadAddress (lldb::addr_t load_addr, lldb::SBTarget &target); This function will always succeed in making a SBAddress object that can be used in API calls (even if "target" isn't valid). If "target" is valid and there are sections currently loaded, then it will resolve the address to a section offset address if it can. Else an address with a NULL section and an offset that is the "load_addr" that was passed in. We do this because a load address might be from the heap or stack. llvm-svn: 135770
* Fix comment.Johnny Chen2011-07-221-3/+3
| | | | llvm-svn: 135737
* Add BasicFormatter and ChildVisitingFormatter utility classes to the ↵Johnny Chen2011-07-223-0/+44
| | | | | | | | | | | | | | | | | | | | | | | | | lldbutil.py module which provide some convenient ways to print an SBValue object. Use that in TestValueAPI.py to print the 'days_of_week' char* array variable. For an example: cvf = lldbutil.ChildVisitingFormatter(indent=2) print cvf.format(days_of_week) produces: (const char *[7]) days_of_week = 0x00000001026a5060 (location) (const char *) [0] = "Sunday" (const char *) [1] = "Monday" (const char *) [2] = "Tuesday" (const char *) [3] = "Wednesday" (const char *) [4] = "Thursday" (const char *) [5] = "Friday" (const char *) [6] = "Saturday" llvm-svn: 135736
* when typing a summary string you can use the %S symbol to explicitly ↵Enrico Granata2011-07-226-1/+327
| | | | | | | | | | | | | | | 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
* Add test scenario of SBValue APIs for the 'days_of_week' global variable.Johnny Chen2011-07-211-0/+7
| | | | llvm-svn: 135716
* Add test scenario for exercising SBValue API: TypeIsPointerType() and ↵Johnny Chen2011-07-211-0/+10
| | | | | | GetByteSize(). llvm-svn: 135699
* Skip the remaining -Y? (skipping ? layers of summaries) tests if using a ↵Johnny Chen2011-07-201-0/+16
| | | | | | | | known version of Apple gcc build which produces wrong namespace for std::string in debug info. llvm-svn: 135597
* A more succinct assertTrue.Johnny Chen2011-07-201-2/+1
| | | | llvm-svn: 135544
* Minor change; add an assertTrue stmt.Johnny Chen2011-07-201-0/+1
| | | | llvm-svn: 135542
* The implementation of categories is now synchronization safeEnrico Granata2011-07-192-8/+91
| | | | | | | | | | | | | | | | | | | | | 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-197-1/+410
| | | | | | | | | | | | | | | | | | | | | | | | | 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-163-0/+231
| | | | | | | | | | | | | | | - 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-1/+74
| | | | | | | | | | | - 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
* Add TestValueAPI.py to exercise the newly added/modified SBValue APIs:Johnny Chen2011-07-154-0/+124
| | | | | | | o GetChildAtIndex, and o GetValueForExpressionPath llvm-svn: 135315
* Added the ability to get synthetic child values from SBValue objects thatGreg Clayton2011-07-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | represent pointers and arrays by adding an extra parameter to the SBValue SBValue::GetChildAtIndex (uint32_t idx, DynamicValueType use_dynamic, bool can_create_synthetic); The new "can_create_synthetic" will allow you to create child values that aren't actually a part of the original type. So if you code like: int *foo_ptr = ... And you have a SBValue that contains the value for "foo_ptr": SBValue foo_value = ... You can now get the "foo_ptr[12]" item by doing this: v = foo_value.GetChiltAtIndex (12, lldb.eNoDynamicValues, True); Normall the "foo_value" would only have one child value (an integer), but we can create "synthetic" child values by treating the pointer as an array. Likewise if you have code like: int array[2]; array_value = .... v = array_value.GetChiltAtIndex (0); // Success, v will be valid v = array_value.GetChiltAtIndex (1); // Success, v will be valid v = array_value.GetChiltAtIndex (2); // Fail, v won't be valid, "2" is not a valid zero based index in "array" But if you use the ability to create synthetic children: v = array_value.GetChiltAtIndex (0, lldb.eNoDynamicValues, True); // Success, v will be valid v = array_value.GetChiltAtIndex (1, lldb.eNoDynamicValues, True); // Success, v will be valid v = array_value.GetChiltAtIndex (2, lldb.eNoDynamicValues, True); // Success, v will be valid llvm-svn: 135292
* Python summary strings:Enrico Granata2011-07-153-0/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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
* Minor change of variable name, from m to b (for breakpoint).Johnny Chen2011-07-141-2/+2
| | | | llvm-svn: 135214
* Fixed a crasher where entering 'help disasm' on the command line would crash ↵Johnny Chen2011-07-141-0/+5
| | | | | | | | | | | lldb. The reasom of the crash is because of a missing entry in the argument table corresponding to eArgTypeUnsignedInteger. Add such entry and modify the call site of the crash to go through a fail-fast API to retrieve the argument table. Add a regression test to TestHelp.py. llvm-svn: 135206
* Modify the test script to better handle the different inlining behaviors ofJohnny Chen2011-07-133-11/+39
| | | | | | | | | | | clang/gcc/llvm-gcc. If the first breakpoint is due to stop at an inlined frame, test that the call site corresponds to where it should be. Also add an expecr for a second break stop, if the first break stop corresponds to an inlined call frame #0. rdar://problem/9741470 llvm-svn: 135100
* Add @expectedFailure decorator for test_target_variable_command_with_dsym().Johnny Chen2011-07-131-1/+1
| | | | | | rdar://problem/9763907 llvm-svn: 135069
* Add display of a static int variable to the test scenario.Johnny Chen2011-07-132-0/+7
| | | | llvm-svn: 135016
* Add a test case to exercise 'target variable' command before and after ↵Johnny Chen2011-07-122-4/+55
| | | | | | | | | | running the inferior. Currently it fails after the inferior is run. rdar://problem/9763907 llvm-svn: 135009
* test casesEnrico Granata2011-07-123-0/+361
| | | | llvm-svn: 135008
* smarter summary strings:Enrico Granata2011-07-121-2/+2
| | | | | | | | | - formats %s %char[] %c and %a now work to print 0-terminated c-strings if they are applied to a char* or char[] even without the [] operator (e.g. ${var%s}) - array formats (char[], intN[], ..) now work when applied to an array of a scalar type even without the [] operator (e.g. ${var%int32_t[]}) LLDB will not crash because of endless loop when trying to obtain a summary for an object that has no value and references itself in its summary string In many cases, a wrong summary string will now display an "<error>" message instead of giving out an empty string llvm-svn: 135007
* test case for the named summaries featureEnrico Granata2011-07-123-0/+201
| | | | llvm-svn: 134944
* named summaries:Enrico Granata2011-07-122-1/+33
| | | | | | | | | | | | - 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
* Passing in os.ctermid() as the arg for SBTarget.Launch(...) for stdin_path, ↵Johnny Chen2011-07-1111-36/+27
| | | | | | | | | | | | stdout_path, and stderr_path is just wrong and resulted in the inferior's output getting mixed into the GDB remote communication's log file. Change all test cases to not pass os.ctermid() and either use SBTarget.LaunchSimple() or SBTarget.Launch() and pass None as stdin_path/stdout_path/srderr_path to use a pseudo terminal. rdar://problem/9716499 program output is getting mixed into the GDB remote communications llvm-svn: 134940
* The lldbtest.TestBase.DebugSBValue(self, val) method call now does not need ↵Johnny Chen2011-07-115-28/+28
| | | | | | | | the frame argument. Only the val (of SBValue type) argument is needed. llvm-svn: 134915
* Mark the test with expectedFailure for now.Jim Ingham2011-07-111-0/+5
| | | | llvm-svn: 134914
* rolling back previous commit; double fix made it wrong againEnrico Granata2011-07-111-1/+1
| | | | llvm-svn: 134912
* Prevent the test suite from failing all the time until this bug is fixedEnrico Granata2011-07-111-1/+1
| | | | llvm-svn: 134911
* Mark as expected failure.Johnny Chen2011-07-111-0/+2
| | | | | | rdar://problem/9745789 "expression" can't call functions in class methods llvm-svn: 134910
* Update the test scenario for find_global_variables() to now start the ↵Johnny Chen2011-07-112-5/+25
| | | | | | | | | | | | inferior process before issuing API calls to find the global variable and to get its value. rdar://problem/9700873 has been updated to reflect the latest status. The dwarf case now does not seg fault if the inferior is not started; instead, for dwarf case, the value retrieved from the global variable is None. llvm-svn: 134909
* Add rdar://problem/9747668 info for "target variable g_marked_spot.y" command.Johnny Chen2011-07-081-0/+5
| | | | llvm-svn: 134772
* Add test scenarios for 'target variable' command into TestGlobalVariables.py ↵Johnny Chen2011-07-082-0/+13
| | | | | | file. llvm-svn: 134771
* Add some comment.Johnny Chen2011-07-081-0/+1
| | | | llvm-svn: 134769
* o TestEvents.py:Johnny Chen2011-07-082-0/+88
| | | | | | | | | | | | | | | | Add a usage example of SBEvent APIs. o SBEvent.h and SBListener.h: Add method docstrings for SBEvent.h and SBListener.h, and example usage of SBEvent into the class docstring of SBEvent. o lldb.swig: Add typemap for SBEvent::SBEvent (uint32_t event, const char *cstr, uint32_t cstr_len) so that we can use, in Python, obj2 = lldb.SBEvent(0, "abc") to create an SBEvent. llvm-svn: 134766
* New test to check that we can call functions in static methods in ObjC.Jim Ingham2011-07-083-0/+94
| | | | llvm-svn: 134736
* final fix for the global constructors issueEnrico Granata2011-07-083-1/+59
| | | | | | | new GetValueForExpressionPath() method in ValueObject to navigate expression paths in a more bitfield vs slices aware way changes to the varformats.html document (WIP) llvm-svn: 134679
* Rearranged the debug output to come before the assert for function name ↵Johnny Chen2011-07-081-6/+6
| | | | | | | | 'outer_inline'. Right now clang-139 fails the test. llvm-svn: 134673
* The Python API does not need SBEvent::BroadcasterMatchesPtr() when ↵Johnny Chen2011-07-071-1/+0
| | | | | | SBEvent::BroadcasterMatchesRef() suffices. llvm-svn: 134659
* Add assert to check the SBModule of SBSymbolContextList returned from ↵Johnny Chen2011-07-071-0/+1
| | | | | | SBTarget.FindFunctions(). llvm-svn: 134651
* Add test cases to exercise the SBTarget.FindFunctions() API.Johnny Chen2011-07-071-0/+33
| | | | llvm-svn: 134646
OpenPOWER on IntegriCloud