diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index a59becb476fb4aabfd49c25a29d3a23c542d2898..a337ec2259f1eec8f0862f7180cc61be63944ab4 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -1380,7 +1380,11 @@ class Dumper: # warn("REAL VALUE: <unprintable>") value = item.value - type = value.type + try: + realtype = value.dynamic_type + except: + realtype = value.type + type = realtype; format = self.itemFormat(item) if type.code == gdb.TYPE_CODE_REF: @@ -1399,7 +1403,7 @@ class Dumper: if isSimpleType(typedefStrippedType): #warn("IS SIMPLE: %s " % type) #self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) self.putValue(value) self.putNumChild(0) return @@ -1418,7 +1422,7 @@ class Dumper: and ((nsStrippedType in qqDumpers) or isQObjectDerived): #warn("IS DUMPABLE: %s " % type) #self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) if isQObjectDerived: # value has references stripped off item.value. item1 = Item(value, item.iname) @@ -1434,14 +1438,14 @@ class Dumper: if isNull(value): #warn("NULL POINTER") - self.putType(item.value.type) + self.putType(realtype) self.putValue("0x0") self.putNumChild(0) return if target.code == gdb.TYPE_CODE_VOID: #warn("VOID POINTER: %s" % format) - self.putType(item.value.type) + self.putType(realtype) self.putValue(str(value)) self.putNumChild(0) return @@ -1449,7 +1453,7 @@ class Dumper: if format == 0: # Explicitly requested bald pointer. self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) self.putPointerValue(value.address) self.putNumChild(1) if self.isExpanded(item): @@ -1464,7 +1468,7 @@ class Dumper: # Explicityly requested Latin1 or UTF-8 formatting. f = select(format == 1, Hex2EncodedLatin1, Hex2EncodedUtf8) self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) self.putValue(encodeCharArray(value, 100), f) self.putNumChild(0) return @@ -1472,7 +1476,7 @@ class Dumper: if format == 3: # Explitly requested UTF-16 formatting. self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) self.putValue(encodeChar2Array(value, 100), Hex4EncodedBigEndian) self.putNumChild(0) return @@ -1480,7 +1484,7 @@ class Dumper: if format == 4: # Explitly requested UCS-4 formatting. self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) self.putValue(encodeChar4Array(value, 100), Hex8EncodedBigEndian) self.putNumChild(0) return @@ -1490,7 +1494,7 @@ class Dumper: # A function pointer with format None. self.putValue(str(item.value)) self.putAddress(value.address) - self.putType(item.value.type) + self.putType(realtype) self.putNumChild(0) return @@ -1498,7 +1502,7 @@ class Dumper: if self.autoDerefPointers or name == "this": ## Generic pointer type with format None #warn("GENERIC AUTODEREF POINTER: %s" % value.address) - innerType = item.value.type.target() + innerType = realtype.target() self.putType(innerType) savedCurrentChildType = self.currentChildType self.currentChildType = stripClassTag(str(innerType)) @@ -1510,7 +1514,7 @@ class Dumper: # Fall back to plain pointer printing. #warn("GENERIC PLAIN POINTER: %s" % value.type) - self.putType(item.value.type) + self.putType(realtype) self.putAddress(value.address) self.putNumChild(1) if self.isExpanded(item): @@ -1525,14 +1529,14 @@ class Dumper: if str(typedefStrippedType).startswith("<anon"): # Anonymous union. We need a dummy name to distinguish # multiple anonymous unions in the struct. - self.putType(item.value.type) + self.putType(realtype) self.putValue("{...}") self.anonNumber += 1 with Children(self, 1): self.listAnonymous(item, "#%d" % self.anonNumber, type) return - #warn("GENERIC STRUCT: %s" % item.value.type) + #warn("GENERIC STRUCT: %s" % realtype) #warn("INAME: %s " % item.iname) #warn("INAMES: %s " % self.expandedINames) #warn("EXPANDED: %s " % (item.iname in self.expandedINames)) diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 3d2ee22b09a2f54031f2d0a54efca7f82aee5df9..829a36d2c4ed970d8dd3c53c45608b36e08303ed 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -155,7 +155,7 @@ public: a += 1; } - ~Foo() + virtual ~Foo() { a = 5; }