162 lines · python
1import lldb2 3 4class jasSynthProvider:5 def __init__(self, valobj, dict):6 self.valobj = valobj7 8 def num_children(self):9 return 210 11 def get_child_at_index(self, index):12 child = None13 if index == 0:14 child = self.valobj.GetChildMemberWithName("A")15 if index == 1:16 child = self.valobj.CreateValueFromExpression("X", "(int)1")17 return child18 19 def get_child_index(self, name):20 if name == "A":21 return 022 if name == "X":23 return 124 return None25 26 27def ccc_summary(sbvalue, internal_dict):28 sbvalue = sbvalue.GetNonSyntheticValue()29 # This tests that the SBValue.GetNonSyntheticValue() actually returns a30 # non-synthetic value. If it does not, then sbvalue.GetChildMemberWithName("a")31 # in the following statement will call the 'get_child_index' method of the32 # synthetic child provider CCCSynthProvider below (which return the "b" field").33 return "CCC object with leading value " + str(sbvalue.GetChildMemberWithName("a"))34 35 36def ccc_synthetic(sbvalue, internal_dict):37 sbvalue = sbvalue.GetSyntheticValue()38 # This tests that the SBValue.GetSyntheticValue() actually returns a39 # synthetic value. If it does, then sbvalue.GetChildMemberWithName("a")40 # in the following statement will call the 'get_child_index' method of the41 # synthetic child provider CCCSynthProvider below (which return the "b" field").42 return "CCC object with leading synthetic value " + str(43 sbvalue.GetChildMemberWithName("a")44 )45 46 47def bar_int_synthetic(sbvalue, internal_dict):48 sbvalue = sbvalue.GetSyntheticValue()49 # This tests that the SBValue.GetSyntheticValue() actually returns no50 # value when the value has no synthetic representation.51 return "bar_int synthetic: " + str(sbvalue)52 53 54class CCCSynthProvider(object):55 def __init__(self, sbvalue, internal_dict):56 self._sbvalue = sbvalue57 58 def num_children(self):59 return 360 61 def get_child_index(self, name):62 if name == "a":63 # Return b for test.64 return 165 raise RuntimeError("I don't want to be called!")66 67 def get_child_at_index(self, index):68 if index == 0:69 return self._sbvalue.GetChildMemberWithName("a")70 if index == 1:71 return self._sbvalue.GetChildMemberWithName("b")72 if index == 2:73 return self._sbvalue.GetChildMemberWithName("c")74 75 76def empty1_summary(sbvalue, internal_dict):77 return "I am an empty Empty1"78 79 80class Empty1SynthProvider(object):81 def __init__(self, sbvalue, internal_dict):82 self._sbvalue = sbvalue83 84 def num_children(self):85 return 086 87 def get_child_at_index(self, index):88 return None89 90 91def empty2_summary(sbvalue, internal_dict):92 return "I am an empty Empty2"93 94 95class Empty2SynthProvider(object):96 def __init__(self, sbvalue, internal_dict):97 self._sbvalue = sbvalue98 99 def num_children(self):100 return 0101 102 def get_child_at_index(self, index):103 return None104 105 106def __lldb_init_module(debugger, dict):107 debugger.CreateCategory("JASSynth").AddTypeSynthetic(108 lldb.SBTypeNameSpecifier("JustAStruct"),109 lldb.SBTypeSynthetic.CreateWithClassName("synth.jasSynthProvider"),110 )111 cat = debugger.CreateCategory("CCCSynth")112 cat.AddTypeSynthetic(113 lldb.SBTypeNameSpecifier("CCC"),114 lldb.SBTypeSynthetic.CreateWithClassName(115 "synth.CCCSynthProvider", lldb.eTypeOptionCascade116 ),117 )118 cat.AddTypeSummary(119 lldb.SBTypeNameSpecifier("CCC"),120 lldb.SBTypeSummary.CreateWithFunctionName(121 "synth.ccc_summary", lldb.eTypeOptionCascade122 ),123 )124 cat.AddTypeSynthetic(125 lldb.SBTypeNameSpecifier("Empty1"),126 lldb.SBTypeSynthetic.CreateWithClassName("synth.Empty1SynthProvider"),127 )128 cat.AddTypeSummary(129 lldb.SBTypeNameSpecifier("Empty1"),130 lldb.SBTypeSummary.CreateWithFunctionName("synth.empty1_summary"),131 )132 cat.AddTypeSynthetic(133 lldb.SBTypeNameSpecifier("Empty2"),134 lldb.SBTypeSynthetic.CreateWithClassName("synth.Empty2SynthProvider"),135 )136 cat.AddTypeSummary(137 lldb.SBTypeNameSpecifier("Empty2"),138 lldb.SBTypeSummary.CreateWithFunctionName(139 "synth.empty2_summary", lldb.eTypeOptionHideEmptyAggregates140 ),141 )142 cat2 = debugger.CreateCategory("CCCSynth2")143 cat2.AddTypeSynthetic(144 lldb.SBTypeNameSpecifier("CCC"),145 lldb.SBTypeSynthetic.CreateWithClassName(146 "synth.CCCSynthProvider", lldb.eTypeOptionCascade147 ),148 )149 cat2.AddTypeSummary(150 lldb.SBTypeNameSpecifier("CCC"),151 lldb.SBTypeSummary.CreateWithFunctionName(152 "synth.ccc_synthetic", lldb.eTypeOptionCascade153 ),154 )155 cat3 = debugger.CreateCategory("BarIntSynth")156 cat3.AddTypeSummary(157 lldb.SBTypeNameSpecifier("int"),158 lldb.SBTypeSummary.CreateWithFunctionName(159 "synth.bar_int_synthetic", lldb.eTypeOptionCascade160 ),161 )162