| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
Fix the bug and add a test case.
llvm-svn: 136265
|
|
|
|
| |
llvm-svn: 136230
|
|
|
|
|
|
| |
simple iteration example.
llvm-svn: 136227
|
|
|
|
|
|
| |
know their own frames.
llvm-svn: 136194
|
|
|
|
| |
llvm-svn: 136187
|
|
|
|
| |
llvm-svn: 136147
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
end of list test function as __eol_test__.
The simple example can be reduced to:
for t in task_head.linked_list_iter('next'):
print t
Modify the test program to exercise the API for both cases: supplying or not
supplying an end of list test function.
llvm-svn: 136144
|
|
|
|
|
|
|
|
|
|
|
| |
too complex in the test case. We can just simply test that the SBValue object
is a valid object and it does not correspond to a null pointer in order to say
that EOL has not been reached.
Modify the test case and the lldb.py docstring to have a more compact test
function.
llvm-svn: 136123
|
|
|
|
|
|
|
|
| |
introducing two files
to be included from lldb.swig: python-typemaps.swig and python-wrapper.swig.
llvm-svn: 136117
|
|
|
|
|
|
| |
end_of_list_test.
llvm-svn: 136016
|
|
|
|
|
|
|
|
|
|
|
|
| |
for child in value:
# do something with the child value
and SBValue.linked_list_iter():
for task in task_head.linked_list_iter('next', eol_test):
# visit each item in the linked list
llvm-svn: 136015
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 135648
|
|
|
|
| |
llvm-svn: 135647
|
|
|
|
| |
llvm-svn: 135642
|
|
|
|
| |
llvm-svn: 135631
|
|
|
|
| |
llvm-svn: 135630
|
|
|
|
| |
llvm-svn: 135553
|
|
|
|
| |
llvm-svn: 135547
|
|
|
|
| |
llvm-svn: 135539
|
|
|
|
| |
llvm-svn: 135536
|
|
|
|
|
|
| |
They are not docstring'ed yet.
llvm-svn: 135531
|
|
|
|
|
|
|
|
| |
headers and the other is the .i interface files.
The objective is to move the .h header into .i interface file eventually.
llvm-svn: 135526
|
|
|
|
| |
llvm-svn: 135459
|
|
|
|
| |
llvm-svn: 135441
|
|
|
|
| |
llvm-svn: 135436
|
|
|
|
| |
llvm-svn: 135432
|
|
|
|
|
|
| |
SBBreakpointLocation.
llvm-svn: 135430
|
|
|
|
| |
llvm-svn: 135419
|
|
|
|
| |
llvm-svn: 135417
|
|
|
|
|
|
| |
swigging the header files.
llvm-svn: 135416
|
|
|
|
| |
llvm-svn: 135405
|
|
|
|
|
|
| |
print out to ease correcting errors
llvm-svn: 135395
|
|
|
|
|
|
| |
objects by default.
llvm-svn: 135357
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of the duty of having SWIG docstring features and multiline string literals
embedded within.
lldb.swig now %include .../SBTarget.i, instead of .../SBTarget.h. Will create
other interface files and transition them over.
Also update modify-python-lldb.py to better handle the trailing blank line right
before the ending '"""' Python docstring delimiter.
llvm-svn: 135355
|
|
|
|
|
|
|
|
|
|
|
|
| |
incorporate the doxgen doc block of
SBValue::GetChildAtIndex(uint32_t idx,
lldb::DynamicValueType use_dynamic,
bool can_create_synthetic);
into the SBValue docstrings.
llvm-svn: 135295
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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
|
|
|
|
| |
llvm-svn: 135194
|
|
|
|
| |
llvm-svn: 135190
|
|
|
|
|
|
|
|
| |
Add logic to modify-python-lldb to correct swig's transformation of 'char **argv' and 'char **envp'
to 'char argv' and 'char envp' by morphing them into the 'list argv' and 'list envp' (as a list of
Python strings).
llvm-svn: 135114
|
|
|
|
|
|
| |
definitions.
llvm-svn: 134775
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
*', to 'str', i.e., Python string.
llvm-svn: 134543
|
|
|
|
|
|
|
| |
generated from the swig docstring features instead of blindly applying the
cleanup action for all input lines.
llvm-svn: 134368
|
|
|
|
|
|
| |
Add post-processing step to remove the trailing blank lines from the docstrings of lldb.py.
llvm-svn: 134360
|
|
|
|
|
|
| |
doxygen/c++-comment residues.
llvm-svn: 134326
|
|
|
|
|
|
|
| |
take advantage of them. Update modify-python-lldb.py to remove some 'residues'
resulting from swigification.
llvm-svn: 134269
|
|
|
|
|
|
|
|
|
| |
methods of them.
A few of the auto-generated method docstrings don't look right, and may need to be fixed
by either overwriting the auto-gened docstrings or some post-processing steps.
llvm-svn: 134246
|