diff options
author | hjk <hjk@qt.io> | 2020-11-24 18:28:22 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-11-27 13:58:30 +0000 |
commit | 2bb32ed7a374d5baa816bb26dafb13de45b05c74 (patch) | |
tree | 77d0391e4cc22c9e08a586b56f8e8cc255bb3dbd | |
parent | 80fdbfff05d2adc6d6d23011a4dd4b1852ba4b2c (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.py | 11 | ||||
-rw-r--r-- | share/qtcreator/debugger/qttypes.py | 44 |
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) |