forked from qt-creator/qt-creator
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:
@@ -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()
|
||||
|
@@ -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)
|
||||
|
@@ -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 : \
|
||||
|
@@ -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
|
||||
|
@@ -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")
|
||||
|
Reference in New Issue
Block a user