[debuging][bindings] read only values we want to show in summary

This commit is contained in:
Vasily Levchenko
2019-11-20 17:09:15 +01:00
parent 9c6a3e94eb
commit 45a6c58d56
+8 -7
View File
@@ -97,13 +97,15 @@ def select_provider(lldb_val, tip, internal_dict):
else __FACTORY['object'](lldb_val, tip, internal_dict)
class KonanHelperProvider(lldb.SBSyntheticValueProvider):
def __init__(self, valobj, amString):
def __init__(self, valobj, amString, internal_dict = []):
self._target = lldb.debugger.GetSelectedTarget()
self._process = self._target.GetProcess()
self._valobj = valobj
self._ptr = lldb_val_to_ptr(self._valobj)
if amString:
return
self._internal_dict = internal_dict.copy()
self._to_string_depth = TO_STRING_DEPTH if "to_string_depth" not in self._internal_dict.keys() else self._internal_dict["to_string_depth"]
if self._children_count == 0:
self._children_count = evaluate("(int)Konan_DebugGetFieldCount({})".format(self._ptr)).signed
self._children = []
@@ -142,6 +144,8 @@ class KonanHelperProvider(lldb.SBSyntheticValueProvider):
return self._type_conversion[int(value_type)](address, str(self._children[index].name()))
def _create_synthetic_child(self, address, name):
if self._to_string_depth == 0:
return None
index = self.get_child_index(name)
value = self._valobj.CreateChildAtOffset(str(name),
self._children[index].offset(),
@@ -249,7 +253,7 @@ class KonanObjectSyntheticProvider(KonanHelperProvider):
else:
self._children_count = 0
super(KonanObjectSyntheticProvider, self).__init__(valobj, False)
super(KonanObjectSyntheticProvider, self).__init__(valobj, False, internal_dict)
if not tip in SYNTHETIC_OBJECT_LAYOUT_CACHE:
SYNTHETIC_OBJECT_LAYOUT_CACHE[tip] = [
@@ -260,8 +264,6 @@ class KonanObjectSyntheticProvider(KonanHelperProvider):
log(lambda : "TIP: {:#x} HIT".format(tip))
self._children = SYNTHETIC_OBJECT_LAYOUT_CACHE[tip]
self._values = [self._read_value(index) for index in range(self._children_count)]
self._internal_dict = internal_dict
self._to_string_depth = TO_STRING_DEPTH if "to_string_depth" not in self._internal_dict.keys() else self._internal_dict["to_string_depth"]
def _field_name(self, index):
@@ -304,7 +306,7 @@ class KonanObjectSyntheticProvider(KonanHelperProvider):
class KonanArraySyntheticProvider(KonanHelperProvider):
def __init__(self, valobj, internal_dict):
self._children_count = 0
super(KonanArraySyntheticProvider, self).__init__(valobj, False)
super(KonanArraySyntheticProvider, self).__init__(valobj, False, internal_dict)
if self._ptr is None:
return
valobj.SetSyntheticChildrenGenerated(True)
@@ -314,8 +316,7 @@ class KonanArraySyntheticProvider(KonanHelperProvider):
offset = zerro_address - valobj.unsigned
size = first_address - zerro_address
self._children = [MemberLayout(str(x), type, offset + x * size) for x in range(self.num_children())]
self._values = [self._read_value(i) for i in range(self.cap_children_count())]
self._internal_dict = internal_dict
self._values = [self._read_value(i) for i in range(min(ARRAY_TO_STRING_LIMIT, self._children_count))]
def cap_children_count(self):