MCPcopy Create free account
hub / github.com/KDE/kdevelop / printableQString

Function printableQString

plugins/lldb/formatters/qt.py:89–139  ·  view source on GitHub ↗
(valobj)

Source from the content-addressed store, hash-verified

87
88
89def printableQString(valobj):
90 pointer = 0
91 length = 0
92 if valobj.IsValid():
93 d = valobj.GetChildMemberWithName('d')
94 data = d.GetChildMemberWithName('data')
95 offset = d.GetChildMemberWithName('offset')
96 size = d.GetChildMemberWithName('size')
97
98 isQt4 = data.IsValid()
99 size_val = size.GetValueAsSigned(-1)
100 alloc = d.GetChildMemberWithName('alloc').GetValueAsUnsigned(0)
101 if isQt4:
102 alloc += 1
103
104 # some sanity check to see if we are dealing with garbage
105 if size_val < 0 or size_val >= alloc:
106 return None, 0, 0
107
108 tooLarge = u''
109 if size_val > HiddenMemberProvider._capping_size():
110 tooLarge = u'...'
111 size_val = HiddenMemberProvider._capping_size()
112
113 if isQt4:
114 pointer = data.GetValueAsUnsigned(0)
115 elif offset.IsValid():
116 pointer = d.GetValueAsUnsigned(0) + offset.GetValueAsUnsigned(0)
117 else:
118 qarraydata_t = valobj.GetTarget().FindFirstType('QArrayData')
119 if qarraydata_t.IsValid():
120 pointer = d.GetValueAsUnsigned(0) + qarraydata_t.GetByteSize()
121 else:
122 pointer = d.GetValueAsUnsigned(0) + 24 # Fallback to hardcoded value
123
124 # size in the number of chars, each char is 2 bytes in UTF16
125 length = size_val * 2
126 if length == 0:
127 return u'', pointer, length
128
129 try:
130 error = lldb.SBError()
131 string_data = valobj.process.ReadMemory(pointer, length, error)
132 # The QString object might be not yet initialized. In this case size is a bogus value,
133 # and memory access may fail
134 if error.Success():
135 content = string_data.decode('utf-16')
136 return content + tooLarge, pointer, length
137 except:
138 pass
139 return None, 0, 0
140
141
142def QStringSummaryProvider(valobj, internal_dict):

Callers 3

QStringSummaryProviderFunction · 0.85
_updateMethod · 0.85
constructEncodedMethod · 0.85

Calls 2

IsValidMethod · 0.80
_capping_sizeMethod · 0.80

Tested by

no test coverage detected