diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index 3ff4d7dc935265ed7e87466a54ecc94a454e01be..4e78f6e61fdfa3c28c78501bea07d0d775f791a7 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -676,6 +676,7 @@ class FrameCommand(gdb.Command): # Locals # for item in listOfLocals(varList): + d.anonNumber = -1 #warn("ITEM NAME %s: " % item.name) try: #warn("ITEM VALUE %s: " % item.value) @@ -779,19 +780,19 @@ class FrameCommand(gdb.Command): def handleWatch(self, d, exp, iname): + exp = str(exp) #warn("HANDLING WATCH %s, INAME: '%s'" % (exp, iname)) - if exp.startswith("["): - warn("EVAL: EXP: %s" % exp) + if exp.startswith("[") and exp.endswith("]"): + #warn("EVAL: EXP: %s" % exp) d.beginHash() - d.put('iname="%s",' % iname) - d.put('name="%s",' % exp) - d.put('exp="%s",' % exp) + d.putField("iname", iname) + d.putField("name", exp) + d.putField("exp", exp) try: list = eval(exp) - #warn("EVAL: LIST: %s" % list) - d.put('value=" "') - d.put('type=" "') - d.put('numchild="%d"' % len(list)) + d.putValue("") + d.putType(" ") + d.putNumChild(len(list)) # This is a list of expressions to evaluate d.beginChildren(len(list)) itemNumber = 0 @@ -801,28 +802,28 @@ class FrameCommand(gdb.Command): d.endChildren() except: warn("EVAL: ERROR CAUGHT") - d.put('value="<syntax error>"') - d.put('type=" "') - d.put('numchild="0"') + d.putValue("<syntax error>") + d.putType(" ") + d.putNumChild(0) d.beginChildren(0) d.endChildren() d.endHash() return d.beginHash() - d.put('iname="%s",' % iname) - d.put('name="%s",' % exp) - d.put('exp="%s",' % exp) + d.putField("iname", iname) + d.putField("name", exp) + d.putField("exp", exp) handled = False if exp == "<Edit>": - d.put('value=" ",type=" ",numchild="0",') + d.putValue('value=" ",type=" ",numchild="0",') else: - try: + #try: value = parseAndEvaluate(exp) item = Item(value, iname, None, None) d.putItemHelper(item) - except RuntimeError: - d.put('value="<invalid>",type="<unknown>",numchild="0",') + #except RuntimeError: + #d.put('value="<invalid>",type="<unknown>",numchild="0",') d.endHash() @@ -1254,6 +1255,16 @@ class Dumper: Item(item.value.dereference(), item.iname, "*", "*")) self.endChildren() + elif str(type).startswith("<anon"): + # Anonymous union. We need a dummy name to distinguish + # multiple anonymous unions in the struct. + self.putType(item.value.type) + self.putValue("{...}") + self.anonNumber += 1 + self.beginChildren(1) + self.listAnonymous(item, "#%d" % self.anonNumber, type) + self.endChildren() + else: #warn("GENERIC STRUCT: %s" % item.value.type) #warn("INAME: %s " % item.iname) @@ -1292,7 +1303,6 @@ class Dumper: self.beginChildren(1, innerType) baseNumber = 0 - anonNumber = 0 for field in fields: #warn("FIELD: %s" % field) #warn(" BITSIZE: %s" % field.bitsize) @@ -1329,8 +1339,8 @@ class Dumper: elif len(field.name) == 0: # Anonymous union. We need a dummy name to distinguish # multiple anonymous unions in the struct. - anonNumber += 1 - self.listAnonymous(item, "#%d" % anonNumber, field.type) + self.anonNumber += 1 + self.listAnonymous(item, "#%d" % self.anonNumber, field.type) else: # Named field. self.beginHash() @@ -1342,8 +1352,8 @@ class Dumper: self.endChildren() def listAnonymous(self, item, name, type): - anonNumber = 0 for field in type.fields(): + warn("FIELD NAME: %s" % field.name) if len(field.name) > 0: value = item.value[field.name] child = Item(value, item.iname, field.name, field.name) @@ -1353,8 +1363,8 @@ class Dumper: self.endHash(); else: # Further nested. - anonNumber += 1 - name = "#%d" % anonNumber + self.anonNumber += 1 + name = "#%d" % self.anonNumber iname = "%s.%s" % (item.iname, name) child = Item(item.value, iname, None, name) self.beginHash()