diff --git a/share/qtcreator/debugger/cdbbridge.py b/share/qtcreator/debugger/cdbbridge.py index c7b38ac9d1d..6d8100b2082 100644 --- a/share/qtcreator/debugger/cdbbridge.py +++ b/share/qtcreator/debugger/cdbbridge.py @@ -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() diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 3d5ff2a3d9f..1dc96c7b677 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -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) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 4892de54874..0acbe570e0a 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -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 : \ diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 0b327a0f7cc..76c9bb1cfb9 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -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 diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index a1c7e2ee8b9..2793cd4572c 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -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")