From d059459d9fa9a838f34bb831ba9ff35aa30f45f2 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Mon, 28 Jun 2010 09:40:35 +0200 Subject: [PATCH] debugger: make qulonglong visible in Local&Watchers Only one level of typedef was stripped, but qulonglong has two. --- share/qtcreator/gdbmacros/dumper.py | 37 +++++++++++++++---------- tests/manual/gdbdebugger/simple/app.cpp | 12 ++++++-- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index 6ebbd61f483..189651121e4 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -755,6 +755,13 @@ def encodeString(value): p += 1 return s +def stripTypedefs(typeobj): + type = typeobj + while type.code == gdb.TYPE_CODE_TYPEDEF: + type = type.strip_typedefs().unqualified() + return type + + ####################################################################### # # Item @@ -1236,6 +1243,7 @@ class Dumper: #warn("REAL INAME: %s " % item.iname) #warn("REAL NAME: %s " % name) #warn("REAL TYPE: %s " % item.value.type) + #warn("REAL CODE: %s " % item.value.type.code) #warn("REAL VALUE: %s " % item.value) #try: # warn("REAL VALUE: %s " % item.value) @@ -1261,27 +1269,28 @@ class Dumper: if type.code == gdb.TYPE_CODE_TYPEDEF: type = type.target() - strippedType = self.stripNamespaceFromType( - type.strip_typedefs().unqualified()).replace("::", "__") + typedefStrippedType = stripTypedefs(type) + nsStrippedType = self.stripNamespaceFromType(typedefStrippedType)\ + .replace("::", "__") - #warn(" STRIPPED: %s" % strippedType) - #warn(" DUMPERS: %s" % (strippedType in qqDumpers)) + #warn(" STRIPPED: %s" % nsStrippedType) + #warn(" DUMPERS: %s" % (nsStrippedType in qqDumpers)) - if isSimpleType(type.unqualified()): + if isSimpleType(typedefStrippedType): #warn("IS SIMPLE: %s " % type) #self.putAddress(value.address) self.putType(item.value.type) self.putValue(value) self.putNumChild(0) - elif ((format is None) or (format >= 1)) and strippedType in qqDumpers: + elif ((format is None) or (format >= 1)) and nsStrippedType in qqDumpers: #warn("IS DUMPABLE: %s " % type) #self.putAddress(value.address) self.putType(item.value.type) - qqDumpers[strippedType](self, item) + qqDumpers[nsStrippedType](self, item) #warn(" RESULT: %s " % self.output) - elif type.code == gdb.TYPE_CODE_ENUM: + elif typedefStrippedType.code == gdb.TYPE_CODE_ENUM: #warn("GENERIC ENUM: %s" % value) #self.putAddress(value.address) self.putType(item.value.type) @@ -1289,7 +1298,7 @@ class Dumper: self.putNumChild(0) - elif type.code == gdb.TYPE_CODE_PTR: + elif typedefStrippedType.code == gdb.TYPE_CODE_PTR: warn("POINTER: %s" % format) isHandled = False @@ -1316,9 +1325,9 @@ class Dumper: self.putNumChild(0) if (not isHandled): - strippedType = str(type.strip_typedefs()) \ + anonStrippedType = str(typedefStrippedType) \ .replace("(anonymous namespace)", "") - if strippedType.find("(") != -1: + if anonStrippedType.find("(") != -1: # A function pointer. self.putValue(str(item.value)) self.putAddress(value.address) @@ -1333,8 +1342,8 @@ class Dumper: self.putNumChild(0) isHandled = True - target = str(type.target().strip_typedefs().unqualified()) - if (not isHandled) and target == "void": + target = stripTypedefs(type.target()) + if (not isHandled) and target.code == TYPE_CODE_VOID: self.putType(item.value.type) self.putValue(str(value)) self.putNumChild(0) @@ -1424,7 +1433,7 @@ class Dumper: def putFields(self, item, innerType = None): value = item.value - fields = value.type.strip_typedefs().fields() + fields = stripTypedefs(value.type).fields() baseNumber = 0 for field in fields: #warn("FIELD: %s" % field) diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 50c73cb9e35..1642dec6971 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -1669,11 +1669,17 @@ FooVector fooVector() return f; } +namespace ns { + typedef unsigned long long vl; + typedef vl verylong; +}; + void testStuff() { - FooVector const &f = fooVector(); - int i = f.size(); - Q_UNUSED(i); + ns::vl j = 1000; + ns::verylong k = 1000; + ++j; + ++k; } void testPassByReferenceHelper(Foo &f) -- GitLab