From a45bfdc4e6f037b2f555374e67c6f38cdcedda45 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Wed, 26 May 2010 17:41:09 +0200 Subject: [PATCH] debugger: improve QVariant(QString) dumper (partially cherry picked from commit dd714e9ccb55eb8dc6c9cbdf75944f41f0573514) --- share/qtcreator/gdbmacros/dumper.py | 2 +- share/qtcreator/gdbmacros/gdbmacros.py | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index 2012cef8daa..bfb4604b6ca 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -838,7 +838,7 @@ class FrameCommand(gdb.Command): d.typeformats = typeformats d.formats = formats d.useFancy = useFancy - d.passExceptions = "passexceptions" in options + d.passExceptions = "pe" in options d.autoDerefPointers = "autoderef" in options d.ns = qtNamespace() d.expandedINames = expandedINames diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py index 41ae51b5888..112a0176f0d 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.py +++ b/share/qtcreator/gdbmacros/gdbmacros.py @@ -1453,9 +1453,9 @@ def qdump__QUrl(d, item): def qdumpHelper__QVariant(d, value): - #warn("VARIANT TYPE: %s : " % variantType) data = value["d"]["data"] variantType = int(value["d"]["type"]) + #warn("VARIANT TYPE: %s : " % variantType) val = None inner = "" innert = "" @@ -1597,15 +1597,18 @@ def qdumpHelper__QVariant(d, value): def qdump__QVariant(d, item): val, inner, innert = qdumpHelper__QVariant(d, item.value) + #warn("VARIANT DATA: '%s' '%s' '%s': " % (val, inner, innert)) - if len(inner): - # Build-in types. - #d.putValue("(%s)" % innert) - d.putType("%sQVariant (%s)" % (d.ns, innert)) - d.putNumChild(1) - if d.isExpanded(item): - with Children(d): - d.putItem(Item(val, item.iname, "data", "data")) + if len(inner): + innerType = gdb.lookup_type(inner) + # FIXME: Why "shared"? + if innerType.sizeof > item.value["d"]["data"].type.sizeof: + v = item.value["d"]["data"]["shared"]["ptr"] \ + .cast(innerType.pointer()).dereference() + else: + v = item.value["d"]["data"].cast(innerType) + d.putItemHelper(Item(v, item.iname)) + d.putType("%sQVariant (%s)" % (d.ns, innert), d.currentTypePriority + 1) else: # User types. d_member = item.value["d"] -- GitLab