diff options
author | hjk <hjk@qt.io> | 2020-12-08 07:40:01 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-12-08 10:03:54 +0000 |
commit | 786e4c6f8f343bbe0c8b9082beab982683ffe2ae (patch) | |
tree | 0b4785984671d50ea93a43a53c1edc0997ade26e | |
parent | 698733afbfc16282b658790225b16548738786f5 (diff) |
Debugger: Re-enable shortcut to get known type sizes in dumpers
Looks like we need to continue with this crutch for MinGW.
This partiall reverts commit 1074c2ffceb1a0df5598ae6e4b9ce1985ee05f25.
Change-Id: I89d32f31281c3ef720bbc2a21d5a99bfd0066ba3
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
(cherry picked from commit ffe3c566700ba7550a0d0791c69a63d5623d32b4)
-rw-r--r-- | share/qtcreator/debugger/dumper.py | 28 | ||||
-rw-r--r-- | share/qtcreator/debugger/qttypes.py | 4 |
2 files changed, 32 insertions, 0 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 26d6487ce6..4c765990c6 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -3816,6 +3816,25 @@ class DumperBase(): self.registerType(typeId, tdata) return self.Type(self, typeId) + def knownArrayTypeSize(self): + return 3 * self.ptrSize() if self.qtVersion() >= 0x060000 else self.ptrSize() + + def knownTypeSize(self, typish): + if typish[0] == 'Q': + if typish.startswith('QList<') or typish.startswith('QVector<'): + return self.knownArrayTypeSize() + if typish == 'QObject': + return 2 * self.ptrSize() + if typish == 'QStandardItemData': + return 4 * self.ptrSize() if self.qtVersion() >= 0x060000 else 2 * self.ptrSize() + if typish == 'Qt::ItemDataRole': + return 4 + if typish == 'QChar': + return 2 + if typish in ('quint32', 'qint32'): + return 4 + return None + def createType(self, typish, size=None): if isinstance(typish, self.Type): #typish.check() @@ -3823,6 +3842,15 @@ class DumperBase(): if isinstance(typish, str): ns = self.qtNamespace() typish = typish.replace('@', ns) + if typish.startswith(ns): + if size is None: + size = self.knownTypeSize(typish[len(ns):]) + else: + if size is None: + size = self.knownTypeSize(typish) + if size is not None: + typish = ns + typish + tdata = self.typeData.get(typish, None) if tdata is not None: return self.Type(self, typish) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 4731ac8fbf..f15cddffca 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -243,11 +243,15 @@ def qdump__Qt__ItemDataRole(d, value): def qdump__QStandardItemData(d, value): + d.createType('@Qt::ItemDataRole') # warm up cache role, pad, val = value.split('{@Qt::ItemDataRole}@{@QVariant}') d.putPairContents(role.value(), (role, val), 'role', 'value') def qdump__QStandardItem(d, value): + d.createType('@QStandardItemData') # warm up cache + d.createType('@QStandardItem') + d.createType('@QStandardItem*') vtable, dptr = value.split('pp') # There used to be a virtual destructor that got removed in # 88b6abcebf29b455438 on Apr 18 17:01:22 2017 |