aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-11-24 18:28:22 +0100
committerhjk <hjk@qt.io>2020-11-27 13:58:30 +0000
commit2bb32ed7a374d5baa816bb26dafb13de45b05c74 (patch)
tree77d0391e4cc22c9e08a586b56f8e8cc255bb3dbd
parent80fdbfff05d2adc6d6d23011a4dd4b1852ba4b2c (diff)
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>
-rw-r--r--share/qtcreator/debugger/dumper.py11
-rw-r--r--share/qtcreator/debugger/qttypes.py44
2 files changed, 26 insertions, 29 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index acb80d3e67..ecdd36372a 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -555,7 +555,8 @@ class DumperBase():
return 0, size
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.
if self.qtVersion() >= 0x050000:
if self.ptrSize() == 4:
@@ -1733,9 +1734,8 @@ class DumperBase():
yield self.createValue(data + i * stepSize, innerType)
#yield self.createValue(data + i * stepSize, 'void*')
- def vectorChildrenGenerator(self, addr, innerType):
- base = self.extractPointer(addr)
- data, size, alloc = self.vectorDataHelper(base)
+ def vectorChildrenGenerator(self, value, innerType):
+ data, size, _ = self.vectorData(value)
for i in range(size):
yield self.createValue(data + i * innerType.size(), innerType)
@@ -2141,8 +2141,7 @@ class DumperBase():
with Children(self):
innerType = connections.type[0]
# Should check: innerType == ns::QObjectPrivate::ConnectionList
- base = self.extractPointer(connections)
- data, size, alloc = self.vectorDataHelper(base)
+ data, size, _ = self.vectorData(connections)
connectionType = self.createType('@QObjectPrivate::Connection')
for i in range(size):
first = self.extractPointer(data + i * 2 * ptrSize)
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 1ceabdecdf..f749fa8328 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -1620,13 +1620,13 @@ def qdump__QStack(d, value):
def qdump__QPolygonF(d, value):
- data, size, alloc = d.vectorDataHelper(d.extractPointer(value))
+ data, size, _ = d.vectorData(value)
d.putItemCount(size)
d.putPlotData(data, size, d.createType('QPointF'))
def qdump__QPolygon(d, value):
- data, size, alloc = d.vectorDataHelper(d.extractPointer(value))
+ data, size, _ = d.vectorData(value)
d.putItemCount(size)
d.putPlotData(data, size, d.createType('QPoint'))
@@ -1640,7 +1640,7 @@ def qdump__QGraphicsPolygonItem(d, value):
offset = 328 if d.isMsvcTarget() else 320
else:
offset = 308
- data, size, alloc = d.vectorDataHelper(d.extractPointer(dptr + offset))
+ data, size, alloc = d.vectorData(dptr + offset)
d.putItemCount(size)
d.putPlotData(data, size, d.createType('QPointF'))
@@ -2101,7 +2101,7 @@ def qdump__QVariant(d, value):
def qedit__QVector(d, value, data):
values = data.split(',')
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)
@@ -2119,8 +2119,7 @@ def qdump__QVector(d, value):
if value.type.name == d.qtNamespace() + "QVector":
d.putBetterType(value.type.name + '<' + value.type.ltarget[0].name + '>')
else:
- dd = d.extractPointer(value)
- data, size, alloc = d.vectorDataHelper(dd)
+ data, size, alloc = d.vectorData(value)
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
d.putItemCount(size)
d.putPlotData(data, size, value.type[0])
@@ -2128,8 +2127,7 @@ def qdump__QVector(d, value):
if False:
def qdump__QObjectConnectionList(d, value):
- dd = d.extractPointer(value)
- data, size, alloc = d.vectorDataHelper(dd)
+ data, size, alloc = d.vectorData(value)
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
d.putItemCount(size)
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):
- # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, so be explicit:
- offset = 2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8
- _, elements_d_ptr = d.split('pp', container_ptr + offset)
- elements_data_ptr, elements_size, _ = d.vectorDataHelper(elements_d_ptr)
+ # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
+ # so be explicit:
+ pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
+ 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_value, _, element_flags = d.split('qII', element_at_n_addr)
enc = 'latin1' if is_bytes or (element_flags & 8) else 'utf16'
- bytedata, _, _ = d.qArrayData(container_ptr + offset)
+ bytedata, _, _ = d.qArrayData(pos)
bytedata += element_value
if d.qtVersion() >= 0x060000:
bytedata_len = d.extractInt64(bytedata)
@@ -3204,13 +3202,13 @@ def qdumpHelper_QCbor_array(d, container_ptr, is_cbor):
if not container_ptr:
d.putItemCount(0)
return
- # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, so be explicit:
- offset = 2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8
- _, elements_d_ptr = d.split('pp', container_ptr + offset)
- elements_data_ptr, elements_size, _ = d.vectorDataHelper(elements_d_ptr)
+ # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
+ # so be explicit:
+ pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
+ elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize())
d.putItemCount(elements_size)
if d.isExpanded():
- bytedata, _, _ = d.qArrayData(container_ptr + offset)
+ bytedata, _, _ = d.qArrayData(pos)
with Children(d, maxNumChild=1000):
for i in range(elements_size):
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:
d.putItemCount(0)
return
- # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB, so be explicit:
- offset = 2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8
- data_d_ptr, elements_d_ptr = d.split('pp', container_ptr + offset)
- elements_data_ptr, elements_size, _ = d.vectorDataHelper(elements_d_ptr)
+ # d.split('i@{QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
+ # so be explicit:
+ pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
+ elements_data_ptr, elements_size, _ = d.vectorData(pos + d.ptrSize())
elements_size = int(elements_size / 2)
d.putItemCount(elements_size)
if d.isExpanded():
- bytedata, _, _ = d.qArrayDataHelper(data_d_ptr)
+ bytedata, _, _ = d.qArrayDataHelper(pos)
with Children(d, maxNumChild=1000):
for i in range(elements_size):
key = qdumpHelper_QCborArray_valueAt(d, container_ptr, elements_data_ptr, 2 * i, bytedata, is_cbor)