2 %typemap
(in
) (const char
**symbol_name
, uint32_t num_names
) {
3 using namespace lldb_private
;
4 /* Check if is a list
*/
5 if
(PythonList
::Check
($input
)) {
6 PythonList list
(PyRefType
::Borrowed
, $input
);
9 $
1 = (char
**)malloc
(($
2+1)*sizeof
(char
*));
10 for
(i
= 0; i
< $
2; i
++) {
11 PythonString py_str
= list.GetItemAtIndex
(i
).AsType
<PythonString
>();
12 if
(!py_str.IsAllocated
()) {
13 PyErr_SetString
(PyExc_TypeError
,"list must contain strings and blubby");
18 $
1[i
] = const_cast
<char
*>(py_str.GetString
().data
());
21 } else if
($input
== Py_None
) {
24 PyErr_SetString
(PyExc_TypeError
,"not a list");
30 STRING_EXTENSION_LEVEL_OUTSIDE
(SBTarget
, lldb
::eDescriptionLevelBrief
)
32 %extend lldb
::SBTarget
{
35 # operator
== is a free function
, which swig does not handle
, so we inject
36 # our own equality operator here
37 def __eq__
(self
, other
):
38 return not self.__ne__
(other
)
40 class modules_access
(object
):
41 '''A helper object that will lazily hand out lldb.SBModule objects for a target when supplied an index
, or by full or partial path.'''
42 def __init__
(self
, sbtarget
):
43 self.sbtarget
= sbtarget
47 return int
(self.sbtarget.GetNumModules
())
50 def __getitem__
(self
, key
):
51 num_modules
= self.sbtarget.GetNumModules
()
53 if
-num_modules
<= key
< num_modules
:
55 return self.sbtarget.GetModuleAtIndex
(key
)
56 elif type
(key
) is str
:
57 if key.find
('
/'
) == -1:
58 for idx in range
(num_modules
):
59 module
= self.sbtarget.GetModuleAtIndex
(idx
)
60 if module.file.basename
== key
:
63 for idx in range
(num_modules
):
64 module
= self.sbtarget.GetModuleAtIndex
(idx
)
65 if module.file.fullpath
== key
:
67 # See if the string is a UUID
69 the_uuid
= uuid.UUID
(key
)
71 for idx in range
(num_modules
):
72 module
= self.sbtarget.GetModuleAtIndex
(idx
)
73 if module.uuid
== the_uuid
:
77 elif type
(key
) is uuid.UUID
:
78 for idx in range
(num_modules
):
79 module
= self.sbtarget.GetModuleAtIndex
(idx
)
80 if module.uuid
== key
:
82 elif isinstance
(key
, type
(re.compile
(''
))):
84 for idx in range
(num_modules
):
85 module
= self.sbtarget.GetModuleAtIndex
(idx
)
86 re_match
= key.search
(module.file.fullpath
)
88 matching_modules.append
(module
)
89 return matching_modules
91 print
("error: unsupported item type: %s" % type
(key
))
94 def get_modules_access_object
(self
):
95 '''An accessor function that returns a modules_access
() object which allows lazy module access from a lldb.SBTarget object.'''
96 return self.modules_access
(self
)
98 def get_modules_array
(self
):
99 '''An accessor function that returns a list
() that contains all modules in a lldb.SBTarget object.'''
101 for idx in range
(self.GetNumModules
()):
102 modules.append
(self.GetModuleAtIndex
(idx
))
105 def module_iter
(self
):
106 '''Returns an iterator over all modules in a lldb.SBTarget
108 return lldb_iter
(self
, 'GetNumModules'
, 'GetModuleAtIndex'
)
110 def breakpoint_iter
(self
):
111 '''Returns an iterator over all breakpoints in a lldb.SBTarget
113 return lldb_iter
(self
, 'GetNumBreakpoints'
, 'GetBreakpointAtIndex'
)
115 class bkpts_access
(object
):
116 '''A helper object that will lazily hand out bkpts for a target when supplied an index.'''
117 def __init__
(self
, sbtarget
):
118 self.sbtarget
= sbtarget
122 return int
(self.sbtarget.GetNumBreakpoints
())
125 def __getitem__
(self
, key
):
126 if isinstance
(key
, int
):
128 if
-count
<= key
< count
:
130 return self.sbtarget.GetBreakpointAtIndex
(key
)
133 def get_bkpts_access_object
(self
):
134 '''An accessor function that returns a bkpts_access
() object which allows lazy bkpt access from a lldb.SBtarget object.'''
135 return self.bkpts_access
(self
)
137 def get_target_bkpts
(self
):
138 '''An accessor function that returns a list
() that contains all bkpts in a lldb.SBtarget object.'''
140 for idx in range
(self.GetNumBreakpoints
()):
141 bkpts.append
(self.GetBreakpointAtIndex
(idx
))
144 def watchpoint_iter
(self
):
145 '''Returns an iterator over all watchpoints in a lldb.SBTarget
147 return lldb_iter
(self
, 'GetNumWatchpoints'
, 'GetWatchpointAtIndex'
)
149 class watchpoints_access
(object
):
150 '''A helper object that will lazily hand out watchpoints for a target when supplied an index.'''
151 def __init__
(self
, sbtarget
):
152 self.sbtarget
= sbtarget
156 return int
(self.sbtarget.GetNumWatchpoints
())
159 def __getitem__
(self
, key
):
160 if isinstance
(key
, int
):
162 if
-count
<= key
< count
:
164 return self.sbtarget.GetWatchpointAtIndex
(key
)
167 def get_watchpoints_access_object
(self
):
168 '''An accessor function that returns a watchpoints_access
() object which allows lazy watchpoint access from a lldb.SBtarget object.'''
169 return self.watchpoints_access
(self
)
171 def get_target_watchpoints
(self
):
172 '''An accessor function that returns a list
() that contains all watchpoints in a lldb.SBtarget object.'''
174 for idx in range
(self.GetNumWatchpoints
()):
175 watchpoints.append
(self.GetWatchpointAtIndex
(idx
))
178 modules
= property
(get_modules_array
, None
, doc
='''A read only property that returns a list
() of lldb.SBModule objects contained in this target. This list is a list all modules that the target currently is tracking
(the main executable and all dependent shared libraries
).'''
)
179 module
= property
(get_modules_access_object
, None
, doc
=r'''A read only property that returns an object that implements python operator overloading with the square brackets
().\n target.module
[<int
>] allows array access to any modules.\n target.module
[<str
>] allows access to modules by basename
, full path
, or uuid string value.\n target.module
[uuid.UUID
()] allows module access by UUID.\n target.module
[re
] allows module access using a regular expression that matches the module full path.'''
)
180 process
= property
(GetProcess
, None
, doc
='''A read only property that returns an lldb object that represents the process
(lldb.SBProcess
) that this target owns.'''
)
181 executable
= property
(GetExecutable
, None
, doc
='''A read only property that returns an lldb object that represents the main executable module
(lldb.SBModule
) for this target.'''
)
182 debugger
= property
(GetDebugger
, None
, doc
='''A read only property that returns an lldb object that represents the debugger
(lldb.SBDebugger
) that owns this target.'''
)
183 num_breakpoints
= property
(GetNumBreakpoints
, None
, doc
='''A read only property that returns the number of breakpoints that this target has as an integer.'''
)
184 breakpoints
= property
(get_target_bkpts
, None
, doc
='''A read only property that returns a list
() of lldb.SBBreakpoint objects for all breakpoints in this target.'''
)
185 breakpoint
= property
(get_bkpts_access_object
, None
, doc
='''A read only property that returns an object that can be used to access breakpoints as an array
("bkpt_12 = lldb.target.bkpt[12]").'''
)
186 num_watchpoints
= property
(GetNumWatchpoints
, None
, doc
='''A read only property that returns the number of watchpoints that this target has as an integer.'''
)
187 watchpoints
= property
(get_target_watchpoints
, None
, doc
='''A read only property that returns a list
() of lldb.SBwatchpoint objects for all watchpoints in this target.'''
)
188 watchpoint
= property
(get_watchpoints_access_object
, None
, doc
='''A read only property that returns an object that can be used to access watchpoints as an array
("watchpoint_12 = lldb.target.watchpoint[12]").'''
)
189 broadcaster
= property
(GetBroadcaster
, None
, doc
='''A read only property that an lldb object that represents the broadcaster
(lldb.SBBroadcaster
) for this target.'''
)
190 byte_order
= property
(GetByteOrder
, None
, doc
='''A read only property that returns an lldb enumeration value
(lldb.eByteOrderLittle
, lldb.eByteOrderBig
, lldb.eByteOrderInvalid
) that represents the byte order for this target.'''
)
191 addr_size
= property
(GetAddressByteSize
, None
, doc
='''A read only property that returns the size in bytes of an address for this target.'''
)
192 triple
= property
(GetTriple
, None
, doc
='''A read only property that returns the target triple
(arch-vendor-os
) for this target as a string.'''
)
193 data_byte_size
= property
(GetDataByteSize
, None
, doc
='''A read only property that returns the size in host bytes of a byte in the data address space for this target.'''
)
194 code_byte_size
= property
(GetCodeByteSize
, None
, doc
='''A read only property that returns the size in host bytes of a byte in the code address space for this target.'''
)
195 platform
= property
(GetPlatform
, None
, doc
='''A read only property that returns the platform associated with with this target.'''
)