forked from qt-creator/qt-creator
Debugger: Use Values instead of addresses in vectorDataHelper
Also rename it to vectorData, in line with byteArrayData and stringData Change-Id: I91a4ddba272fcada3e451680ba5a5a756f7a976e Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -555,7 +555,8 @@ class DumperBase():
|
|||||||
return 0, size
|
return 0, size
|
||||||
return size, limit
|
return size, limit
|
||||||
|
|
||||||
def vectorDataHelper(self, vector_data_ptr):
|
def vectorData(self, value):
|
||||||
|
vector_data_ptr = self.extractPointer(value)
|
||||||
# vector_data_ptr is what is e.g. stored in a QVector's d_ptr.
|
# vector_data_ptr is what is e.g. stored in a QVector's d_ptr.
|
||||||
if self.qtVersion() >= 0x050000:
|
if self.qtVersion() >= 0x050000:
|
||||||
if self.ptrSize() == 4:
|
if self.ptrSize() == 4:
|
||||||
@@ -1733,9 +1734,8 @@ class DumperBase():
|
|||||||
yield self.createValue(data + i * stepSize, innerType)
|
yield self.createValue(data + i * stepSize, innerType)
|
||||||
#yield self.createValue(data + i * stepSize, 'void*')
|
#yield self.createValue(data + i * stepSize, 'void*')
|
||||||
|
|
||||||
def vectorChildrenGenerator(self, addr, innerType):
|
def vectorChildrenGenerator(self, value, innerType):
|
||||||
base = self.extractPointer(addr)
|
data, size, _ = self.vectorData(value)
|
||||||
data, size, alloc = self.vectorDataHelper(base)
|
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
yield self.createValue(data + i * innerType.size(), innerType)
|
yield self.createValue(data + i * innerType.size(), innerType)
|
||||||
|
|
||||||
@@ -2141,8 +2141,7 @@ class DumperBase():
|
|||||||
with Children(self):
|
with Children(self):
|
||||||
innerType = connections.type[0]
|
innerType = connections.type[0]
|
||||||
# Should check: innerType == ns::QObjectPrivate::ConnectionList
|
# Should check: innerType == ns::QObjectPrivate::ConnectionList
|
||||||
base = self.extractPointer(connections)
|
data, size, _ = self.vectorData(connections)
|
||||||
data, size, alloc = self.vectorDataHelper(base)
|
|
||||||
connectionType = self.createType('@QObjectPrivate::Connection')
|
connectionType = self.createType('@QObjectPrivate::Connection')
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
first = self.extractPointer(data + i * 2 * ptrSize)
|
first = self.extractPointer(data + i * 2 * ptrSize)
|
||||||
|
@@ -1620,13 +1620,13 @@ def qdump__QStack(d, value):
|
|||||||
|
|
||||||
|
|
||||||
def qdump__QPolygonF(d, value):
|
def qdump__QPolygonF(d, value):
|
||||||
data, size, alloc = d.vectorDataHelper(d.extractPointer(value))
|
data, size, _ = d.vectorData(value)
|
||||||
d.putItemCount(size)
|
d.putItemCount(size)
|
||||||
d.putPlotData(data, size, d.createType('QPointF'))
|
d.putPlotData(data, size, d.createType('QPointF'))
|
||||||
|
|
||||||
|
|
||||||
def qdump__QPolygon(d, value):
|
def qdump__QPolygon(d, value):
|
||||||
data, size, alloc = d.vectorDataHelper(d.extractPointer(value))
|
data, size, _ = d.vectorData(value)
|
||||||
d.putItemCount(size)
|
d.putItemCount(size)
|
||||||
d.putPlotData(data, size, d.createType('QPoint'))
|
d.putPlotData(data, size, d.createType('QPoint'))
|
||||||
|
|
||||||
@@ -1640,7 +1640,7 @@ def qdump__QGraphicsPolygonItem(d, value):
|
|||||||
offset = 328 if d.isMsvcTarget() else 320
|
offset = 328 if d.isMsvcTarget() else 320
|
||||||
else:
|
else:
|
||||||
offset = 308
|
offset = 308
|
||||||
data, size, alloc = d.vectorDataHelper(d.extractPointer(dptr + offset))
|
data, size, alloc = d.vectorData(dptr + offset)
|
||||||
d.putItemCount(size)
|
d.putItemCount(size)
|
||||||
d.putPlotData(data, size, d.createType('QPointF'))
|
d.putPlotData(data, size, d.createType('QPointF'))
|
||||||
|
|
||||||
@@ -2101,7 +2101,7 @@ def qdump__QVariant(d, value):
|
|||||||
def qedit__QVector(d, value, data):
|
def qedit__QVector(d, value, data):
|
||||||
values = data.split(',')
|
values = data.split(',')
|
||||||
d.call('void', value, 'resize', str(len(values)))
|
d.call('void', value, 'resize', str(len(values)))
|
||||||
base, vsize, valloc = d.vectorDataHelper(d.extractPointer(value))
|
base, vsize, valloc = d.vectorData(value)
|
||||||
d.setValues(base, value.type[0].name, values)
|
d.setValues(base, value.type[0].name, values)
|
||||||
|
|
||||||
|
|
||||||
@@ -2119,8 +2119,7 @@ def qdump__QVector(d, value):
|
|||||||
if value.type.name == d.qtNamespace() + "QVector":
|
if value.type.name == d.qtNamespace() + "QVector":
|
||||||
d.putBetterType(value.type.name + '<' + value.type.ltarget[0].name + '>')
|
d.putBetterType(value.type.name + '<' + value.type.ltarget[0].name + '>')
|
||||||
else:
|
else:
|
||||||
dd = d.extractPointer(value)
|
data, size, alloc = d.vectorData(value)
|
||||||
data, size, alloc = d.vectorDataHelper(dd)
|
|
||||||
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
|
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
|
||||||
d.putItemCount(size)
|
d.putItemCount(size)
|
||||||
d.putPlotData(data, size, value.type[0])
|
d.putPlotData(data, size, value.type[0])
|
||||||
@@ -2128,8 +2127,7 @@ def qdump__QVector(d, value):
|
|||||||
|
|
||||||
if False:
|
if False:
|
||||||
def qdump__QObjectConnectionList(d, value):
|
def qdump__QObjectConnectionList(d, value):
|
||||||
dd = d.extractPointer(value)
|
data, size, alloc = d.vectorData(value)
|
||||||
data, size, alloc = d.vectorDataHelper(dd)
|
|
||||||
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
|
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
|
||||||
d.putItemCount(size)
|
d.putItemCount(size)
|
||||||
d.putPlotData(data, size, d.createType('@QObjectPrivate::ConnectionList'))
|
d.putPlotData(data, size, d.createType('@QObjectPrivate::ConnectionList'))
|
||||||
@@ -3168,14 +3166,14 @@ def qdump__qfloat16(d, value):
|
|||||||
|
|
||||||
|
|
||||||
def qdumpHelper_QCbor_string(d, container_ptr, element_index, is_bytes):
|
def qdumpHelper_QCbor_string(d, container_ptr, element_index, is_bytes):
|
||||||
# d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, so be explicit:
|
# d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
|
||||||
offset = 2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8
|
# so be explicit:
|
||||||
_, elements_d_ptr = d.split('pp', container_ptr + offset)
|
pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
|
||||||
elements_data_ptr, elements_size, _ = d.vectorDataHelper(elements_d_ptr)
|
elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize())
|
||||||
element_at_n_addr = elements_data_ptr + element_index * 16 # sizeof(QtCbor::Element) == 15
|
element_at_n_addr = elements_data_ptr + element_index * 16 # sizeof(QtCbor::Element) == 15
|
||||||
element_value, _, element_flags = d.split('qII', element_at_n_addr)
|
element_value, _, element_flags = d.split('qII', element_at_n_addr)
|
||||||
enc = 'latin1' if is_bytes or (element_flags & 8) else 'utf16'
|
enc = 'latin1' if is_bytes or (element_flags & 8) else 'utf16'
|
||||||
bytedata, _, _ = d.qArrayData(container_ptr + offset)
|
bytedata, _, _ = d.qArrayData(pos)
|
||||||
bytedata += element_value
|
bytedata += element_value
|
||||||
if d.qtVersion() >= 0x060000:
|
if d.qtVersion() >= 0x060000:
|
||||||
bytedata_len = d.extractInt64(bytedata)
|
bytedata_len = d.extractInt64(bytedata)
|
||||||
@@ -3204,13 +3202,13 @@ def qdumpHelper_QCbor_array(d, container_ptr, is_cbor):
|
|||||||
if not container_ptr:
|
if not container_ptr:
|
||||||
d.putItemCount(0)
|
d.putItemCount(0)
|
||||||
return
|
return
|
||||||
# d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, so be explicit:
|
# d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
|
||||||
offset = 2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8
|
# so be explicit:
|
||||||
_, elements_d_ptr = d.split('pp', container_ptr + offset)
|
pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
|
||||||
elements_data_ptr, elements_size, _ = d.vectorDataHelper(elements_d_ptr)
|
elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize())
|
||||||
d.putItemCount(elements_size)
|
d.putItemCount(elements_size)
|
||||||
if d.isExpanded():
|
if d.isExpanded():
|
||||||
bytedata, _, _ = d.qArrayData(container_ptr + offset)
|
bytedata, _, _ = d.qArrayData(pos)
|
||||||
with Children(d, maxNumChild=1000):
|
with Children(d, maxNumChild=1000):
|
||||||
for i in range(elements_size):
|
for i in range(elements_size):
|
||||||
d.putSubItem(i, qdumpHelper_QCborArray_valueAt(d, container_ptr, elements_data_ptr, i, bytedata, is_cbor))
|
d.putSubItem(i, qdumpHelper_QCborArray_valueAt(d, container_ptr, elements_data_ptr, i, bytedata, is_cbor))
|
||||||
@@ -3225,14 +3223,14 @@ def qdumpHelper_QCbor_map(d, container_ptr, is_cbor):
|
|||||||
if not container_ptr:
|
if not container_ptr:
|
||||||
d.putItemCount(0)
|
d.putItemCount(0)
|
||||||
return
|
return
|
||||||
# d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, so be explicit:
|
# d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
|
||||||
offset = 2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8
|
# so be explicit:
|
||||||
data_d_ptr, elements_d_ptr = d.split('pp', container_ptr + offset)
|
pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
|
||||||
elements_data_ptr, elements_size, _ = d.vectorDataHelper(elements_d_ptr)
|
elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize())
|
||||||
elements_size = int(elements_size / 2)
|
elements_size = int(elements_size / 2)
|
||||||
d.putItemCount(elements_size)
|
d.putItemCount(elements_size)
|
||||||
if d.isExpanded():
|
if d.isExpanded():
|
||||||
bytedata, _, _ = d.qArrayDataHelper(data_d_ptr)
|
bytedata, _, _ = d.qArrayDataHelper(pos)
|
||||||
with Children(d, maxNumChild=1000):
|
with Children(d, maxNumChild=1000):
|
||||||
for i in range(elements_size):
|
for i in range(elements_size):
|
||||||
key = qdumpHelper_QCborArray_valueAt(d, container_ptr, elements_data_ptr, 2 * i, bytedata, is_cbor)
|
key = qdumpHelper_QCborArray_valueAt(d, container_ptr, elements_data_ptr, 2 * i, bytedata, is_cbor)
|
||||||
|
Reference in New Issue
Block a user