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)
|
self.listFields(nativeType, value)
|
||||||
tdata.lalignment = lambda : \
|
tdata.lalignment = lambda : \
|
||||||
self.nativeStructAlignment(nativeType)
|
self.nativeStructAlignment(nativeType)
|
||||||
|
if code == TypeCodeEnum:
|
||||||
|
tdata.enumDisplay = lambda intval, addr : \
|
||||||
|
self.nativeTypeEnumDisplay(nativeType, addr)
|
||||||
tdata.templateArguments = self.listTemplateParameters(nativeType.name())
|
tdata.templateArguments = self.listTemplateParameters(nativeType.name())
|
||||||
self.registerType(typeId, tdata) # Fix up fields and template args
|
self.registerType(typeId, tdata) # Fix up fields and template args
|
||||||
return self.Type(self, typeId)
|
return self.Type(self, typeId)
|
||||||
@@ -198,9 +201,13 @@ class Dumper(DumperBase):
|
|||||||
align = handleItem(f.type(), align)
|
align = handleItem(f.type(), align)
|
||||||
return align
|
return align
|
||||||
|
|
||||||
def nativeTypeEnumDisplay(self, nativeType, intval):
|
def nativeTypeEnumDisplay(self, nativeType, addr):
|
||||||
# TODO: generate fake value
|
value = cdbext.createValue(addr, nativeType)
|
||||||
return None
|
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):
|
def enumExpression(self, enumType, enumValue):
|
||||||
ns = self.qtNamespace()
|
ns = self.qtNamespace()
|
||||||
|
@@ -2808,7 +2808,7 @@ class DumperBase:
|
|||||||
def display(self):
|
def display(self):
|
||||||
if self.type.code == TypeCodeEnum:
|
if self.type.code == TypeCodeEnum:
|
||||||
intval = self.extractInteger(self.type.bitsize(), False)
|
intval = self.extractInteger(self.type.bitsize(), False)
|
||||||
return self.type.typeData().enumDisplay(intval)
|
return self.type.typeData().enumDisplay(intval, self.laddress)
|
||||||
simple = self.value()
|
simple = self.value()
|
||||||
if simple is not None:
|
if simple is not None:
|
||||||
return str(simple)
|
return str(simple)
|
||||||
|
@@ -346,7 +346,7 @@ class Dumper(DumperBase):
|
|||||||
gdb.TYPE_CODE_STRING : TypeCodeFortranString,
|
gdb.TYPE_CODE_STRING : TypeCodeFortranString,
|
||||||
}[code]
|
}[code]
|
||||||
if tdata.code == TypeCodeEnum:
|
if tdata.code == TypeCodeEnum:
|
||||||
tdata.enumDisplay = lambda intval : \
|
tdata.enumDisplay = lambda intval, addr : \
|
||||||
self.nativeTypeEnumDisplay(nativeType, intval)
|
self.nativeTypeEnumDisplay(nativeType, intval)
|
||||||
if tdata.code == TypeCodeStruct:
|
if tdata.code == TypeCodeStruct:
|
||||||
tdata.lalignment = lambda : \
|
tdata.lalignment = lambda : \
|
||||||
|
@@ -434,7 +434,7 @@ class Dumper(DumperBase):
|
|||||||
warn('UNKNOWN TYPE KEY: %s: %s' % (typeName, code))
|
warn('UNKNOWN TYPE KEY: %s: %s' % (typeName, code))
|
||||||
elif code == lldb.eTypeClassEnumeration:
|
elif code == lldb.eTypeClassEnumeration:
|
||||||
tdata.code = TypeCodeEnum
|
tdata.code = TypeCodeEnum
|
||||||
tdata.enumDisplay = lambda intval : \
|
tdata.enumDisplay = lambda intval, addr : \
|
||||||
self.nativeTypeEnumDisplay(nativeType, intval)
|
self.nativeTypeEnumDisplay(nativeType, intval)
|
||||||
elif code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat):
|
elif code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat):
|
||||||
tdata.code = TypeCodeComplex
|
tdata.code = TypeCodeComplex
|
||||||
|
@@ -5241,7 +5241,6 @@ void tst_Dumpers::dumper_data()
|
|||||||
"Foo fb = b; unused(&fb);\n"
|
"Foo fb = b; unused(&fb);\n"
|
||||||
"Foo fc = c; unused(&fc);\n"
|
"Foo fc = c; unused(&fc);\n"
|
||||||
"Foo fd = d; unused(&fd);\n")
|
"Foo fd = d; unused(&fd);\n")
|
||||||
+ NoCdbEngine // This doesn't work in cdb for now
|
|
||||||
+ Check("fa", "a (-1000)", "Foo")
|
+ Check("fa", "a (-1000)", "Foo")
|
||||||
+ Check("fb", "b (-999)", "Foo")
|
+ Check("fb", "b (-999)", "Foo")
|
||||||
+ Check("fc", "c (1)", "Foo")
|
+ Check("fc", "c (1)", "Foo")
|
||||||
|
Reference in New Issue
Block a user