Debugger: Add enum value dumper to cdbbridge

Change-Id: I40f1556599be7581eeab0c75b034696ac22a7131
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2017-02-27 14:29:07 +01:00
parent edacb7d383
commit aafb17ae83
5 changed files with 13 additions and 7 deletions

View File

@@ -173,6 +173,9 @@ class Dumper(DumperBase):
self.listFields(nativeType, value)
tdata.lalignment = lambda : \
self.nativeStructAlignment(nativeType)
if code == TypeCodeEnum:
tdata.enumDisplay = lambda intval, addr : \
self.nativeTypeEnumDisplay(nativeType, addr)
tdata.templateArguments = self.listTemplateParameters(nativeType.name())
self.registerType(typeId, tdata) # Fix up fields and template args
return self.Type(self, typeId)
@@ -198,9 +201,13 @@ class Dumper(DumperBase):
align = handleItem(f.type(), align)
return align
def nativeTypeEnumDisplay(self, nativeType, intval):
# TODO: generate fake value
return None
def nativeTypeEnumDisplay(self, nativeType, addr):
value = cdbext.createValue(addr, nativeType)
if value is None:
return ''
enumDisplay = value.nativeDebuggerValue()
# remove '0n' decimal prefix of the native cdb value output
return enumDisplay.replace('(0n', '(')
def enumExpression(self, enumType, enumValue):
ns = self.qtNamespace()

View File

@@ -2808,7 +2808,7 @@ class DumperBase:
def display(self):
if self.type.code == TypeCodeEnum:
intval = self.extractInteger(self.type.bitsize(), False)
return self.type.typeData().enumDisplay(intval)
return self.type.typeData().enumDisplay(intval, self.laddress)
simple = self.value()
if simple is not None:
return str(simple)

View File

@@ -346,7 +346,7 @@ class Dumper(DumperBase):
gdb.TYPE_CODE_STRING : TypeCodeFortranString,
}[code]
if tdata.code == TypeCodeEnum:
tdata.enumDisplay = lambda intval : \
tdata.enumDisplay = lambda intval, addr : \
self.nativeTypeEnumDisplay(nativeType, intval)
if tdata.code == TypeCodeStruct:
tdata.lalignment = lambda : \

View File

@@ -434,7 +434,7 @@ class Dumper(DumperBase):
warn('UNKNOWN TYPE KEY: %s: %s' % (typeName, code))
elif code == lldb.eTypeClassEnumeration:
tdata.code = TypeCodeEnum
tdata.enumDisplay = lambda intval : \
tdata.enumDisplay = lambda intval, addr : \
self.nativeTypeEnumDisplay(nativeType, intval)
elif code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat):
tdata.code = TypeCodeComplex

View File

@@ -5241,7 +5241,6 @@ void tst_Dumpers::dumper_data()
"Foo fb = b; unused(&fb);\n"
"Foo fc = c; unused(&fc);\n"
"Foo fd = d; unused(&fd);\n")
+ NoCdbEngine // This doesn't work in cdb for now
+ Check("fa", "a (-1000)", "Foo")
+ Check("fb", "b (-999)", "Foo")
+ Check("fc", "c (1)", "Foo")