debugger: with gdb 7.3 we can have proper display of dynamic types.

So use it.

Change-Id: If33d087a9b767f0b2e6b16e57a36e9e7aa6e7c16
Reviewed-on: http://codereview.qt.nokia.com/522
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2011-06-20 15:23:28 +02:00
committed by hjk
parent c61652d065
commit f446bebadc
2 changed files with 17 additions and 9 deletions

View File

@@ -93,6 +93,13 @@ def hasInferiorThreadList():
except:
return False
def upcast(value):
try:
type = value.dynamic_type
return value.cast(type)
except:
return value
typeCache = {}
class TypeInfo:
@@ -1287,6 +1294,7 @@ class Dumper:
pass
for item in locals:
item.value = upcast(item.value)
with OutputSafer(self, "", ""):
self.anonNumber = -1
#warn("ITEM NAME %s: " % item.name)
@@ -1614,10 +1622,7 @@ class Dumper:
# warn("REAL VALUE: <unprintable>")
value = item.value
try:
realtype = value.dynamic_type
except:
realtype = value.type
realtype = value.type
type = realtype;
format = self.itemFormat(item)
@@ -1886,7 +1891,7 @@ class Dumper:
#warn("EXPANDED: %s " % (item.iname in self.expandedINames))
fields = extractFields(type)
self.putType(item.value.type)
self.putType(type)
try:
self.putAddress(item.value.address)
except:
@@ -1907,7 +1912,7 @@ class Dumper:
if self.isExpanded(item):
innerType = None
if len(fields) == 1 and fields[0].name is None:
innerType = value.type.target()
innerType = type.target()
with Children(self, 1, innerType):
child = Item(value, item.iname, None, item.name)
self.putFields(child)
@@ -1923,7 +1928,7 @@ class Dumper:
def putFields(self, item, dumpBase = True):
value = item.value
type = stripTypedefs(value.type)
fields = extractFields(type)
fields = extractFields(value.type)
baseNumber = 0
for field in fields:
#warn("FIELD: %s" % field)
@@ -1974,7 +1979,7 @@ class Dumper:
else:
# Named field.
with SubItem(self):
child = Item(value[field.name],
child = Item(upcast(value[field.name]),
item.iname, field.name, field.name)
bitsize = getattr(field, "bitsize", None)
if not bitsize is None: